public class GlobalThreadPools {
private static final String TAG = “GlobalThreadPools”;
private static ExecutorService THREAD_POOL_EXECUTOR;//线程池
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();//CPU数量
private static final int CORE_POOL_SIZE = CPU_COUNT;//核心线程数
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2;//最大线程数
private static final int KEEP_ALIVE_SECONDS = 60;//线程闲置后的存活时间
private static final BlockingQueue<Runnable> sPoolWorkQueue = new LinkedBlockingQueue<>(CPU_COUNT);//任务队列
private static final ThreadFactory sThreadFactory = new ThreadFactory() {//线程工厂
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "Music#" + mCount.getAndIncrement());
}
};
private volatile static GlobalThreadPools mInstance;
private GlobalThreadPools() {
initThreadPool();
}
public static GlobalThreadPools getInstance() {
if (null == mInstance) {
synchronized (GlobalThreadPools.class) {
if (null == mInstance) {
mInstance = new GlobalThreadPools();
}
}
}
return mInstance;
}
public void execute(Runnable runnable) {
THREAD_POOL_EXECUTOR.execute(runnable);
}
//初始化线程池
private void initThreadPool() {
THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(
CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_SECONDS, TimeUnit.SECONDS,
sPoolWorkQueue, sThreadFactory, new RejectedHandler()) {
@Override
public void execute(Runnable command) {
super.execute(command);
}
};
}
private static class RejectedHandler implements RejectedExecutionHandler {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
//可在这里做一些提示用户的操作
}
}
}
调用:
//线程池开启任务
GlobalThreadPools.getInstance().execute(new Runnable() {
@Override
public void run() {
…
}
});