线程池的参数 和拒绝策略
时间: 2023-06-12 15:04:57 浏览: 61
线程池的参数包括:
1. 核心线程数(corePoolSize):线程池中的基本线程数,即在没有任务需要执行时线程池的大小。
2. 最大线程数(maximumPoolSize):线程池中允许存在的最大线程数。
3. 非核心线程空闲时间(keepAliveTime):当线程池中的线程数量大于 corePoolSize 时,如果这些线程在执行完任务后处于空闲状态的时间超过了 keepAliveTime,则它们将被终止。
4. 队列(workQueue):用于存放等待执行任务的阻塞队列。常用的队列有 ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue 等。
5. 线程工厂(threadFactory):用于创建新线程的工厂类。
拒绝策略指的是当线程池中的任务队列已满且线程池中的线程数达到最大线程数时,新提交的任务会被拒绝执行的处理策略。常用的拒绝策略有:
1. AbortPolicy(默认):直接抛出一个 RejectedExecutionException 异常,阻止系统正常工作。
2. CallerRunsPolicy:由提交任务的线程来执行这个任务。这样可以减缓提交任务的速度。
3. DiscardOldestPolicy:丢弃最早的任务,然后提交新的任务。
4. DiscardPolicy:直接丢弃提交的任务。
相关问题
java线程池的拒绝策略
Java线程池提供了四种拒绝策略。默认的拒绝策略是拒绝任务并抛出异常,可以通过设置`RejectedExecutionHandler`参数来实现该策略。例如,可以使用`ThreadPoolExecutor.AbortPolicy()`来设置默认的拒绝策略。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Java 线程池四种拒绝策略](https://blog.csdn.net/qq_42700121/article/details/124442422)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [java线程池拒绝策略详解](https://blog.csdn.net/guangyingposuo/article/details/106253140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
java 线程池拒绝策略
Java线程池拒绝策略是指在线程池无法接受新的任务时,采取的处理方式。主要有四种拒绝策略:
1. AbortPolicy(默认策略):直接抛出RejectedExecutionException异常,不执行新任务。
2. CallerRunsPolicy:直接在调用者线程中执行新任务,即主线程中执行任务。
3. DiscardOldestPolicy:将等待队列中最早的任务移除,然后将新任务添加到队列尾部。
4. DiscardPolicy:直接丢弃新任务,不作处理。
需要注意的是,如果任务数超出了线程池的处理能力,一定要及时调整线程池参数或者采用合适的拒绝策略,否则会导致CPU繁忙,造成系统崩溃等问题。