7大属性和4种拒绝策略

7大属性

                      int corePoolSize,//最小线程数
                      int maximumPoolSize,//最大线程数
                      long keepAliveTime,//最大线程数
                      TimeUnit unit,//等待时间的单位
                      BlockingQueue<Runnable> workQueue,//等待的线程数
                      ThreadFactory threadFactory,//线程工厂
                      RejectedExecutionHandler handler//拒绝策略
 7大属性和四中拒绝策略
       ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
               5,//最大线程数
               3,
               TimeUnit.SECONDS,//等待时间的单位
               new LinkedBlockingQueue<>(3), //等待的线程数
               Executors.defaultThreadFactory(),//线程工厂
               new ThreadPoolExecutor.
                                                              () //第一种拒绝策略
               );

4种拒绝策略

1.AbortPolicy

new ThreadPoolExecutor.AbortPolicy() //第一种拒绝策略
当线程超出了最大线程数和等待线程数的和后会出现异常
java.util.concurrent.RejectedExecutionException

package pool;

import java.util.concurrent.*;

//线程池的三大方法
//Executors 公具类
public class Demo01 {

    public static void main(String[] args) {
//        Executors.newSingleThreadExecutor();创建单个线程
//        ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
//        ExecutorService threadExecutor =Executors.newFixedThreadPool(5);
//        7大属性和四中拒绝策略
        ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
                5,//最大线程数
                3,//等待的时间
                TimeUnit.SECONDS,//等待时间的单位
                new LinkedBlockingQueue<>(3), //等待的线程数
                Executors.defaultThreadFactory(),//线程工厂
                new ThreadPoolExecutor.AbortPolicy() //第一种拒绝策略
        );

        try {
            for (int i = 1; i <10 ; i++) {
                threadExecutor.execute(()->{
                    System.out.println(Thread.currentThread().getName());
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
//            结束线程
            threadExecutor.shutdown();
        }


    }


}

2.CallerRunsPolicy

CallerRunsPolicy当线程数超出时会返回超出的线程,交给主线程执行 。哪来的回哪去

package pool;

import java.util.concurrent.*;

//线程池的三大方法
//Executors 公具类
public class Demo01 {

    public static void main(String[] args) {
//        Executors.newSingleThreadExecutor();创建单个线程
//        ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
//        ExecutorService threadExecutor =Executors.newFixedThreadPool(5);
//        7大属性和四中拒绝策略
        ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
                5,//最大线程数
                3,//等待的时间
                TimeUnit.SECONDS,//等待时间的单位
                new LinkedBlockingQueue<>(3), //等待的线程数
                Executors.defaultThreadFactory(),//线程工厂
                new ThreadPoolExecutor.CallerRunsPolicy() //第二种拒绝策略  哪来的回拿去
        );

        try {
            for (int i = 1; i <10 ; i++) {
                threadExecutor.execute(()->{
                    System.out.println(Thread.currentThread().getName());
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
//            结束线程
            threadExecutor.shutdown();
        }


    }


}




pool-1-thread-2
pool-1-thread-2
pool-1-thread-2
pool-1-thread-2
pool-1-thread-5
pool-1-thread-4
pool-1-thread-3
pool-1-thread-1
main

3.DiscardPolicy

DiscardPolicy不抛出异常,继续执行

package pool;

import java.util.concurrent.*;

//线程池的三大方法
//Executors 公具类
public class Demo01 {

    public static void main(String[] args) {
//        Executors.newSingleThreadExecutor();创建单个线程
//        ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
//        ExecutorService threadExecutor =Executors.newFixedThreadPool(5);
//        7大属性和四中拒绝策略
        ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
                5,//最大线程数
                3,//等待的时间
                TimeUnit.SECONDS,//等待时间的单位
                new LinkedBlockingQueue<>(3), //等待的线程数
                Executors.defaultThreadFactory(),//线程工厂
                new ThreadPoolExecutor.DiscardPolicy() //第三种拒绝策略  不抛出异常
        );

        try {
            for (int i = 1; i <10 ; i++) {
                threadExecutor.execute(()->{
                    System.out.println(Thread.currentThread().getName());
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
//            结束线程
            threadExecutor.shutdown();
        }


    }


}

4.DiscardOldestPolicy 线程队列满后会去和最早的线程竞争

package pool;

import java.util.concurrent.*;

//线程池的三大方法
//Executors 公具类
public class Demo01 {

    public static void main(String[] args) {
//        Executors.newSingleThreadExecutor();创建单个线程
//        ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
//        ExecutorService threadExecutor =Executors.newFixedThreadPool(5);
//        7大属性和四中拒绝策略
        ExecutorService threadExecutor =new ThreadPoolExecutor(2,//最小线程数
                5,//最大线程数
                3,//等待的时间
                TimeUnit.SECONDS,//等待时间的单位
                new LinkedBlockingQueue<>(3), //等待的线程数
                Executors.defaultThreadFactory(),//线程工厂
                new ThreadPoolExecutor.DiscardOldestPolicy() //第四种拒绝策略  线程队列满后会去和最早的线程竞争
        );

        try {
            for (int i = 1; i <10 ; i++) {
                threadExecutor.execute(()->{
                    System.out.println(Thread.currentThread().getName());
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
//            结束线程
            threadExecutor.shutdown();
        }


    }


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值