MST

星途 面试题库

面试题:Java线程池中核心线程和非核心线程的区别

在Java线程池中,核心线程和非核心线程在创建、存活机制以及任务处理上有哪些不同?请详细阐述。
24.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

创建时机

  • 核心线程:当有新任务提交到线程池时,若当前运行的线程数小于核心线程数,线程池会立即创建新的核心线程来处理任务,即使其他核心线程处于空闲状态。
  • 非核心线程:只有当工作队列已满,且当前运行的线程数小于最大线程数时,线程池才会创建非核心线程来处理新提交的任务。

存活机制

  • 核心线程:默认情况下,核心线程会一直存活,即使它们处于空闲状态,不会被销毁。不过,通过调用线程池的allowCoreThreadTimeOut(boolean value)方法并传入true,可以使核心线程在空闲时间达到keepAliveTime时也被销毁。
  • 非核心线程:非核心线程如果在keepAliveTime时间内一直处于空闲状态,就会被线程池销毁。keepAliveTime是线程池为非核心线程设定的存活时间。

任务处理

  • 核心线程:优先处理提交到线程池的任务。只要核心线程中有空闲线程,新任务就会被分配给它们执行。
  • 非核心线程:在核心线程全部忙碌且工作队列已满的情况下,才会启用非核心线程来处理任务。当任务量减少,非核心线程空闲时间超过keepAliveTime,它们就会被回收。