线程池 | corePoolSize | maximumPoolSize | keepAliveTime | unit | workQueue | 场景 | |
newCachedThreadPool | 0 | Integer.MAX_VALUE | 60L | TimeUnit.SECONDS | SynchronousQueue | 执行很多短期异步的小程序或者负载较轻的服务器 | |
newFixedThreadPool | n | n | 0L(不限时) | TimeUnit.MILLISECONDS | new LinkedBlockingQueue<Runnable>() 链阻塞队列 | 执行长期的任务,性能好很多 | |
newSingleThreadExecutor | 1 | 1 | 0L(不限时) | TimeUnit.MILLISECONDS | new LinkedBlockingQueue<Runnable>() 链阻塞队列 | 一个任务一个任务执行的场景 | |
NewScheduledThreadPool | n | Integer.MAX_VALUE | 0L(不限时) | TimeUnit.NANOSECONDS | new DelayedWorkQueue() 一个按超时时间升序排序的队列 | 周期性执行任务的场景 |
线程池任务执行流程:
- 当线程池小于corePoolSize时,新提交任务将创建一个新线程执行任务,即使此时线程池中存在空闲线程。
- 当线程池达到corePoolSize时,新提交任务将被放入workQueue中,等待线程池中任务调度执行
- 当workQueue已满,且maximumPoolSize>corePoolSize时,新提交任务会创建新线程执行任务
- 当提交任务数超过maximumPoolSize时,新提交任务由RejectedExecutionHandler处理
- 当线程池中超过corePoolSize线程,空闲时间达到keepAliveTime时,关闭空闲线程
- 当设置allowCoreThreadTimeOut(true)时,线程池中corePoolSize线程空闲时间达到keepAliveTime也将关闭
参考文章:https://blog.csdn.net/w05980598/article/details/79425071