手写线程池
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int corePoolSize = Math.max(2, Math.min(CPU_COUNT - 1, 4));
private static final int maximumPoolSize = CPU_COUNT * 2 + 1;
private static final int keepAliveTime = 30;
BlockingQueue<Runnable> workQueue = new SynchronousQueue<>();
ThreadFactory threadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "AdvacnedAsyncTask #" + mCount.getAndIncrement());
}
};
RejectedExecutionHandler rejectHandler = new ThreadPoolExecutor.DiscardOldestPolicy();
ThreadPoolExecutor mExecute = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
workQueue,
threadFactory,
rejectHandler
);