代码示例:
- ExecutorService 表⽰⼀个线程池实例.
- Executors 是⼀个⼯⼚类, 能够创建出⼏种不同⻛格的线程池.
ExecutorService 的 submit ⽅法能够向线程池中提交若⼲个任务.
ExecutorService pool = Executors.newFixedThreadPool(10);
pool.submit(new Runnable() {
@Override
public void run() {
System.out.println("hello");
}
});
Executors 创建线程池的⼏种⽅式
- newFixedThreadPool: 创建固定线程数的线程池
- newCachedThreadPool: 创建线程数⽬动态增⻓的线程池.
- newSingleThreadExecutor: 创建只包含单个线程的线程池.
- newScheduledThreadPool: 设定 延迟时间后执⾏命令,或者定期执⾏命令. 是进阶版的 Timer.
Executors 本质上是 ThreadPoolExecutor 类的封装
ThreadPoolExecutor
ThreadPoolExecutor 提供了更多的可选参数, 可以进⼀步细化线程池⾏为的设定.
ThreadPoolExecutor 的构造⽅法
把创建⼀个线程池想象成开个公司. 每个员⼯相当于⼀个线程
- corePoolSize: 正式员⼯的数量. (正式员⼯, ⼀旦录⽤, 永不辞退)
- maximumPoolSize: 正式员⼯ + 临时⼯的数⽬. (临时⼯: ⼀段时间不⼲活, 就被辞退).
- keepAliveTime: 临时⼯允许的空闲时间.
- unit: keepaliveTime 的时间单位, 是秒, 分钟, 还是其他值.
- workQueue: 传递任务的阻塞队列
- threadFactory: 创建线程的⼯⼚, 参与具体的创建线程⼯作.
RejectedExecutionHandler: 拒绝策略, 如果任务量超出公司的负荷了接下来怎么处理.
- AbortPolicy(): 超过负荷, 直接抛出异常.
- CallerRunsPolicy(): 调⽤者负责处理
- DiscardOldestPolicy(): 丢弃队列中最⽼的任务.
- DiscardPolicy(): 丢弃新来的任务