JUC版-线程池

  • 三大方法、七大参数、四种拒绝策略
1.三大方法
public static void main(String[] args) {
        //单个线程
       // ExecutorService threadPool = Executors.newSingleThreadExecutor();
        //固定线程
     //   ExecutorService threadPool = Executors.newFixedThreadPool(5);
        //遇强则强
        ExecutorService threadPool = Executors.newCachedThreadPool();

        try {
            for (int i = 0; i < 100; i++) {
                threadPool.execute(()->{
                    System.out.println(Thread.currentThread().getName()+" ok ");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //线程池,用完得关闭
            threadPool.shutdown();
        }


    }
2.七大参数、四种拒绝策略
/*
* 三大方法、七大参数、四大拒绝策略
* new ThreadPoolExecutor.AbortPolicy() //超过最大承载数,抛出异常
* new ThreadPoolExecutor.DiscardPolicy() //超过最大承载数,不执行,不抛异常
* new ThreadPoolExecutor.CallerRunsPolicy() //超过最大承载数,哪来的回哪去,交给来的时候线程执行
* new ThreadPoolExecutor.DiscardOldestPolicy() //超过最大承载数,与最初执行的线程竞争,成功则执行
* */
public class Demo2 {
    public static void main(String[] args) {
        //推荐这种方式创建线程池
        //最大承载数:max+capacity

        //池的最大线程数如何定义(调优):
        //1.CPU 密集型:CPU几核,就定义几,效率最高
        // -获取CPU核数 Runtime.getRuntime().availableProcessors()
        //2.IO  密集型 获取程序中耗IO的线程数,设置的线程数大于它,避免阻塞,一般两倍即可
        ExecutorService threadPool = new ThreadPoolExecutor(
             2, //核心线程池数量
             5,//线程最多的数量
             3,//超时时间
                TimeUnit.SECONDS,//单位
                new LinkedBlockingQueue(3),//阻塞等待的数量,超过等待的最大数量,启用备用线程池
                Executors.defaultThreadFactory(),//默认创建线程工厂
                new ThreadPoolExecutor.DiscardOldestPolicy() //超过最大承载数,与最初执行的线程竞争,成功则执行
        );
        try {
            for (int i = 1; i <= 9; i++) {
                int finalI = i;
                threadPool.execute(()->{
                    System.out.println(Thread.currentThread().getName()+" Ok "+ finalI);
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //线程池,用完得关闭
            threadPool.shutdown();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值