我们已经准备好了,你呢?

我们与您携手共赢,为您的企业形象保驾护航!

当前位置: 首页 > 百科知识问答 > java线程池拒绝策略

Java线程池的拒绝策略是指当任务数量超过线程池的处理能力时,线程池如何处理这些额外的任务,Java线程池提供了四种拒绝策略,分别是:

1、AbortPolicy(默认策略)

2、CallerRunsPolicy

3、DiscardOldestPolicy

4、DiscardPolicy

下面是对这些策略的详细解释:

1. AbortPolicy(默认策略)

当线程池和队列都满了,无法处理新的任务时,AbortPolicy策略会抛出一个RejectedExecutionException异常,这是默认的拒绝策略。

2. CallerRunsPolicy

当线程池和队列都满了,无法处理新的任务时,CallerRunsPolicy策略会直接在调用者线程中执行这个任务,换句话说,它会将任务放回调用者的队列中,让调用者自己处理。

3. DiscardOldestPolicy

当线程池和队列都满了,无法处理新的任务时,DiscardOldestPolicy策略会丢弃队列中最旧的任务,然后将新任务加入队列。

4. DiscardPolicy

当线程池和队列都满了,无法处理新的任务时,DiscardPolicy策略会直接丢弃新任务,不做任何处理。

下面是一个简单的示例代码,展示了如何使用不同的拒绝策略:

import java.util.concurrent.*;public class ThreadPoolDemo {    public static void main(String[] args) {        // 创建一个固定大小的线程池        ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS,                new ArrayBlockingQueue<>(2), new ThreadPoolExecutor.AbortPolicy());        // 提交任务        for (int i = 0; i < 10; i++) {            executor.execute(new Runnable() {                @Override                public void run() {                    System.out.println("Task executed by: " + Thread.currentThread().getName());                }            });        }        // 关闭线程池        executor.shutdown();    }}

在上面的代码中,我们创建了一个固定大小为2的线程池,队列大小为2,拒绝策略为AbortPolicy,然后提交了10个任务,由于线程池和队列的大小限制,最后会有8个任务被拒绝。

免责声明:本站内容(文字信息+图片素材)来源于互联网公开数据整理或转载,仅用于学习参考,如有侵权问题,请及时联系本站删除,我们将在5个工作日内处理。联系邮箱:chuangshanghai#qq.com(把#换成@)

我们已经准备好了,你呢?

我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

132-7207-3477

上班时间

周一到周五 09:00-18:00

二维码
线