线程池主要解决了2个问题:
- 复用线程,降低线程创建销毁的开销;2. 线程资源限制和资源管理 —— 限制线程数,动态增加减少线程。
继承AbstractExecutorService, 一个int变量维护2个状态, 高3位线程池状态, 低29位(32位机)线程数;
COUNT_BIT = Integer.SIZE- 3
移位操作表示线程池的5种状态:
000 SHUTDWON 拒绝接受任务,要处理完队列中的任务
001 STOP 中断正在处理的任务
010 TIDYING: 整理中: 队列中任务处理完并且线程数为0
011 TERMINATED 已终止
111 运行中(默认)
- 线程池状态切换:
2.1 运行中 -> SHUTDOWN shutdown(); // 拒绝接受任务,要处理完队列中的任务
2.2 运行中 -> SHUTDOWN -> STOP shutdownNow(); // 拒绝接受任务,丢弃队列中的任务