第一种方式(固定线程数)
Executors.newFixedThreadPool
第二种方式(单个线程数)
Executors.singleThreadExecutor
第三种方式(不固定线程数)
Executors.newCachedThreadPool
工作中,你是如何创建线程池的,哪用上面哪种方式创建。
哪种都不适合,自己创建一个线程池。
为什么?
因为newFixedThreadPool、singleThreadExecutor底层是使用LinkedBlockingQueue,这个默认最大值是int最大数。
newCachedThreadPool底层是使用SychronousQueue,单一阻塞队列。
那么,是如何正确创建线程池,通过以下方式创建
new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(5));
网友评论