面试题答案
一键面试创建时机
- 核心线程:当有新任务提交到线程池时,若当前运行的线程数小于核心线程数,线程池会立即创建新的核心线程来处理任务,即使其他核心线程处于空闲状态。
- 非核心线程:只有当工作队列已满,且当前运行的线程数小于最大线程数时,线程池才会创建非核心线程来处理新提交的任务。
存活机制
- 核心线程:默认情况下,核心线程会一直存活,即使它们处于空闲状态,不会被销毁。不过,通过调用线程池的
allowCoreThreadTimeOut(boolean value)
方法并传入true
,可以使核心线程在空闲时间达到keepAliveTime
时也被销毁。 - 非核心线程:非核心线程如果在
keepAliveTime
时间内一直处于空闲状态,就会被线程池销毁。keepAliveTime
是线程池为非核心线程设定的存活时间。
任务处理
- 核心线程:优先处理提交到线程池的任务。只要核心线程中有空闲线程,新任务就会被分配给它们执行。
- 非核心线程:在核心线程全部忙碌且工作队列已满的情况下,才会启用非核心线程来处理任务。当任务量减少,非核心线程空闲时间超过
keepAliveTime
,它们就会被回收。