java线程池拒绝策略

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

10年积累的网站设计、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有石棉免费网站建设让你可以放心的选择与我们合作。

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个任务被拒绝。

文章题目:java线程池拒绝策略
分享URL:http://www.mswzjz.com/qtweb/news28/179178.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联