线程池Executors.newCachedThreadPool
Posted yaoyuan2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池Executors.newCachedThreadPool相关的知识,希望对你有一定的参考价值。
例子:
ExecutorService es = Executors.newCachedThreadPool(); try { for (int i = 0; i < 20; i++) { Runnable syncRunnable = new Runnable() { @Override public void run() { log.info(Thread.currentThread().getName()); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }; es.execute(syncRunnable); } } finally { es.shutdown(); }
运行结果:
10:21:04.610 pool-1-thread-13 10:21:04.612 pool-1-thread-3 10:21:04.612 pool-1-thread-7 10:21:04.612 pool-1-thread-2 10:21:04.610 pool-1-thread-14 10:21:04.612 pool-1-thread-6 10:21:04.611 pool-1-thread-8 10:21:04.611 pool-1-thread-11 10:21:04.611 pool-1-thread-4 10:21:04.610 pool-1-thread-1 10:21:04.611 pool-1-thread-20 10:21:04.611 pool-1-thread-12 10:21:04.610 pool-1-thread-16 10:21:04.611 pool-1-thread-5 10:21:04.611 pool-1-thread-9 10:21:04.610 pool-1-thread-17 10:21:04.610 pool-1-thread-18 10:21:04.610 pool-1-thread-10 10:21:04.611 pool-1-thread-15 10:21:04.611 pool-1-thread-19
调用的调用的ThreadPoolExecutor:
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); }
corePoolSize=0,maximumPoolSize=Integer.MAX_VALUE
keepAliveTime=60秒
allowCoreThreadTimeout=false(默认)
因此,
- 核心线程数为0
- 每来一个任务,先查看缓冲池中是否有可用线程(没超过60秒的),如果有,则用;没有,则就创建一个新线程
- 因为核心线程数为0,池中的线程当达到60秒时,会超时关闭,直到核心线程数=0
以上是关于线程池Executors.newCachedThreadPool的主要内容,如果未能解决你的问题,请参考以下文章