ThreadPoolManager.java 1.19 KB
package com.studymachine.www.manager;

import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 *    time   : 2020/01/11
 *    desc   : 线程池管理类
 */
public final class ThreadPoolManager extends ThreadPoolExecutor {

    private static volatile ThreadPoolManager sInstance;

    public ThreadPoolManager() {
        // 这里最大线程数为什么不是 Int 最大值?因为在华为荣耀机子上面有最大线程数限制
        // 经过测试华为荣耀手机不能超过 300 个线程,否则会出现内存溢出
        // java.lang.OutOfMemoryError:pthread_create (1040KB stack) failed: Out of memory
        // 由于应用自身占用了一些线程数,故减去 300 - 100 = 200 个
        super(0, 200,
                30L, TimeUnit.MILLISECONDS,
                new SynchronousQueue<>());
    }

    public static ThreadPoolManager getInstance() {
        if(sInstance == null) {
            synchronized (ThreadPoolManager.class) {
                if(sInstance == null) {
                    sInstance = new ThreadPoolManager();
                }
            }
        }
        return sInstance;
    }
}