Java线程池的核心参数及工作原理
时间: 2024-08-15 09:02:10 浏览: 32
Java线程池是一种管理线程的技术,它通过复用已经创建好的线程来提高性能和资源利用率。核心参数主要包括以下几个方面:
1. **核心池大小** (`corePoolSize`): 线程池默认启动的最大线程数。即使所有任务都在队列中等待处理,也不会超过这个数量。当任务提交并有新线程可用时,多余的线程会立即停止。
2. **最大池大小** (`maximumPoolSize`): 线程池允许的最大线程数。如果超过了这个限制,新的任务将会进入阻塞队列等待,直到有空闲线程可用。
3. **任务队列** (`queue`): 提交的任务在此排队等待。常见的选项包括 `BlockingQueue` 类型,如 `LinkedList`、`ArrayBlockingQueue` 和 `LinkedBlockingQueue`,也可以自定义。
4. **线程工厂** (`threadFactory`): 用于创建新线程的工厂,可以设置线程属性如名称、优先级等。
5. **拒绝策略** (`handler`): 当任务队列已满且最大线程数也达到上限,如何处理新任务。选项有 `AbortPolicy` (默认) 异常抛出,`CallerRunsPolicy` 由提交任务的线程直接运行,`DiscardOldestJobPolicy` 删除队列最老的任务。
工作原理:
- 当有新任务提交到线程池时,首先检查核心池内的线程是否足够。如果足够,则交给线程去执行;如果不足,则创建新线程。
- 如果线程池已满,任务会被放入队列中等待,直到有线程完成或线程池的大小减小。
- 当线程完成后,它们可能会返回到核心池,也可能因拒绝策略而结束,如超时或达到最大线程数。