当Java线程池的核心线程数已满时,创建新线程的条件如下:
- 任务队列已满:线程池会优先将新任务放入队列等待。**仅当队列无法容纳更多任务(队列已满)**时,才会考虑创建新线程。
- 当前线程数未达最大线程数:在队列已满的情况下,若当前线程数小于最大线程数,线程池会创建新线程处理任务,直到达到最大线程数限制。
关键点:
- 使用有界队列时,队列满会触发新线程的创建。
- 使用无界队列(如
LinkedBlockingQueue
未指定容量)时,队列永远不会满,因此不会创建超过核心线程数的线程。 - 使用SynchronousQueue(无容量)时,任务无法入队,会直接尝试创建新线程(无需等待队列满)。
总结:核心线程已满后,队列已满且线程数未达最大值是创建新线程的必要条件。此时,线程池会突破核心线程数限制,创建新线程直至达到最大线程数,后续任务将触发拒绝策略
。