创建线程池ThreadPoolExecutor

创建线程池有三大方法七大参数:

三大方法为:

1:Executors.newSingleThreadExecutor();单一线程
2:Executors.newFixedThreadPool(5);创建固定线程池的大小
3:Executors.newCachedThreadPool();可伸缩,遇强则强

七大参数为:

1:corePoolSize  核心线程池大小

2:maximumPoolSize最大核心线程池大小

3:keepAliveTime 超时了没有人调用就会被释放

4:TimeUnit 超时单位

5:workQueue 阻塞队列

6:threadFactory 线程工厂

7:handle 拒绝策略

拒绝策略又分为四种拒绝策略,分别为:

1:new ThreadPoolExecutor.AbortPolicy() 线程满了,但还有线程进入,则不处理,并抛出异常

2:new ThreadPoolExecutor.CallerRunsPolicy() 哪里来的去哪里 会输出main 

3:new ThreadPoolExecutor.DiscardPolicy() 队列满了,丢掉任务,但是不会抛出异常

4:new ThreadPoolExecutor.DiscardOldestPolicy() 队列满了,尝试和最早的竞争,不会抛出异常

如何去定义自己的最大线程数量。

1:cpu密集形,电脑几核就定义为几,可以保持cpu的效率最高

2:io密集形, >判断你程序中十分耗io的线程

程序。15个大型任务,io十分占用资源。

推荐使用直接手动去创建线程池。

public static void main(String[] args) {

//        ExecutorService threadPool = Executors.newSingleThreadExecutor();//单一线程
//        ExecutorService threadPool = Executors.newFixedThreadPool(5);//创建固定线程池的大小
//        ExecutorService threadPool = Executors.newCachedThreadPool();//可伸缩,遇强则强

        //corePoolSize 核心线程池大小
        //maximumPoolSize最大核心线程池大小
        //keepAliveTime 超时了没有人调用就会被释放
        //TimeUnit 超时单位
        // workQueue 阻塞队列
        //threadFactory 线程工厂
        //handle 拒绝策略
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2,//正常工作的线程个数
                5,         //最大可以工作的线程个数
                10,             //线程释放时间
                TimeUnit.MICROSECONDS,      //线程释放时间单位
                new LinkedBlockingDeque<>(3),   //超过3个线程等待则出发最大线程
                Executors.defaultThreadFactory(),       //
                new ThreadPoolExecutor.DiscardOldestPolicy());
        //最大承载线程数= deque +max个数

        /**
         * 四种拒绝策略
         *new ThreadPoolExecutor.AbortPolicy()  线程满了,但还有线程进入,则不处理,并抛出异常
         *new ThreadPoolExecutor.CallerRunsPolicy()  哪里来的去哪里  会输出main  ok
         *new ThreadPoolExecutor.DiscardPolicy()  队列满了,丢掉任务,但是不会抛出异常
         *new ThreadPoolExecutor.DiscardOldestPolicy() 队列满了,尝试和最早的竞争,不会抛出异常
         */
        try {
            for (int i = 1; i <= 10; i++) {
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName() + "  ok");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }
    }

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值