线程池核心参数
有7个核心参数
- 核心线程数
- 最大线程数
- 任务队列
- 线程空闲存活时间
- 线程空闲存活时间的单位
- 线程创建工厂
- 拒绝策略
任务提交流程
往线程池中提交任务流程如下:
- 判断线程池中线程数是否小于核心线程数,小于新建线程执行任务,否则进入步骤2
- 判断任务队列是否满了,没满任务添加到队列中,否则进入步骤3
-
判断线程池中线程是是否小于最大线程数,小于新建线程执行任务,否则按照拒绝策略拒绝任务
线程池状态
线程池有5种状态:
- running(运行):新建线程池后的状态为running
- shutdown(关闭):调用shutdown方法后,不接受新的任务,工作的线程继续执行,把队列中的任务执行完成,变成tidying
- stop(停止):调用shutdownnow方法后,不在接受新的任务,中断正在工作的线程,队列中的任务不执行,变成tidying
- tidying(整理)
-
terminated(终止):变成tidying状态之后,内部调用terminated方法
拒绝策略
有4种:
- 直接丢弃
- 直接拒绝,抛异常
- 交给应用线程执行
- 丢弃队列中最早的任务,然后重新提交
线程池的数量怎么确定
看场景是cpu密集型还是io密集型
- cpu密集型:cpu核数
- io密集型:2倍cpu核数