- corePoolSize 核心线程数
- 线程池在完成初始化后,默认情况下,线程池中并没有任何线程,线程池在等待有任务到来时,再去创建新线程去执行任务
- maxPoolSize 最大线程数
- 核心线程数的基础上,额外增加的线程数的上线
添加线程规则
- 如果线程数小于 corePoolSize , 创建一个新线程来运行来运行新任务
- 如果线程数等于或大于 corePoolSize 但小于 maximunPollSize 则任务放入队列
- 如果队列已满, 并且线程数小于 maxPoolSize 创建一个新线程
- 如果队列已满,线程数小于或等于 maxPoolSize 则拒绝
- keepAliveTime
- 如果线程池当前的线程数多余 corePoolSize name多余的线程空闲时间超过 keepAliveTime 会被终止
- ThreadFactory 创建线程
- 默认使用 Exccutors.defaultThreadFactory()
- 创建出来的线程都在同一线程组中, 优先级都是5 都是守护线程
- 自己指定 THreadFactory 就可以改变线程名,线程组,优先级, 是否守护线程
- 工作队列 workQueue
- 三种最常见的队列类型
- 直接交换 SynchronousQueue
- 无界队列 LinkedBlockingQueue
- 有界队列 ArrayBlockingQueue
- 三种最常见的队列类型
- 应该手动还是自动创建
- 手动最好, 可以更加明确线程池的运行规则,避免资源耗尽的风险
- 自动创建
- newFixedThreadPool 容易造成大量内存占用
- newSingleThreadExecutor