2021-06-14 七大参数,四种拒绝策略

本文介绍了四种不同的线程池拒绝策略,并通过示例展示了如何在Java中使用`ThreadPoolExecutor`,结合CPU密集型和IO密集型场景调整核心线程数。重点讲解了`DiscardOldestPolicy`策略在满载时的处理方式。

线程池七大参数

//四个拒绝策略
//new ThreadPoolExecutor.AbortPolicy(); //银行满了 还有人进来 不再处理,抛出异常
//new ThreadPoolExecutor.CallerRunsPolicy(); //银行满了 还有人进来 哪来的去哪里
//new ThreadPoolExecutor.DiscardPolicy(); //银行满了 还有人进来 不再处理,不会抛出异常
//new ThreadPoolExecutor.DiscardOldestPolicy(); //银行满了 尝试和最早的竞争,也不会抛出异常
public class Demo02 {
    // 最大线程到底该如何定义
    //CPU密集型,几核我们就定义为几个数,保持CPU效率最高
    //IO密集型,判断你程序组十分耗IO的线程,大于这个数就OK,比如15个大型任务,IO十分占用资源就用30个数
    public static void main(String[] args) {
        //获取CPU核数
        System.out.println(Runtime.getRuntime().availableProcessors());

        ExecutorService threadPool = new ThreadPoolExecutor(2, //核心线程2
                Runtime.getRuntime().availableProcessors(),   //最大线程Runtime.getRuntime().availableProcessors()获取CPU核数,或者填数字5
                3, TimeUnit.SECONDS,         //超过等待3秒释放线程回到核心2个数
                new LinkedBlockingDeque<>(3),//等待区
                Executors.defaultThreadFactory(), //默认线程工厂,一般不会改
                new ThreadPoolExecutor.DiscardOldestPolicy()); //银行满了 尝试和最早的竞争,也不会抛出异常

        try {
            for (int i = 1; i <= 9; i++) {
                //使用线程池创建线程
                threadPool.execute(()->{
                    System.out.println(Thread.currentThread().getName()+" OK");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //线程池用完需关闭
            threadPool.shutdown();
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值