参数一: corePoolSize:核心线程数
参数二:maximumPoolSize:最大线程数
参数三:keepAliveTime:临时线程的最大存活时间
参数四:unit: 存活时间单位(秒、分、时、天)
参数五:workQueue:来不及执行的任务,存放的队列
参数六:threadFactory:创建线程的工厂(通常不用指定)
参数七:handler:拒绝策略(通常不指定)
1.任务首先分配给核心线程执行,如果核心线程用完,任务会进入等待队列,直到有空闲线程去执行
2.如果等待队列放满(默认容量是int的最大值),线程池会创建临时线程执行最新提交的任务。
3.如果临时线程也用完,再次提交的任务会被拒绝执行。(拒绝策略)
4.临时线程空闲超过指定时间后,会被线程池销毁,核心线程会一直保存在线程池中。
| 策略 | 详解 |
|---|---|
| ThreadPoolExecutor.AbortPolicy | 中止策略,丢弃任务并抛出异常。默认策略 |
| ThreadPoolExecutor.DiscardPolicy | 丢弃策略,丢弃任务但不抛出异常。不推荐的做法 |
| ThreadPoolExecutor.DiscardOldestPolicy | 丢弃最旧策略,抛弃队列中等待最久的任务,再把新任务加入队列中 |
| ThreadPoolExecutor.CallerRunsPolicy | 调用者运行策略,谁触发任务的提交,就由谁去执行当前任务(main线程) |
如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。