JAVA多线程之线程池的使用

public class TestThreadPool {

    public static void main(String[] args) throws ExecutionException {
        //所使用阻塞队列

        //直接提交策策略,工作队列不保存任何任务被等待执行,而是直接提交给线程进行执行。newCachedThreadPool所使用阻塞队列
        //使用此阻塞队列时num不能大于maximumPoolSize,否则将报错(因为直接执行)
        //并且一次性执行num个线程
        BlockingQueue<Runnable> queue = new SynchronousQueue<>();

        //无界队列策略,工作队列大小没有上限,可以添加无数个任务进行等待。newFixedThreadPool使用阻塞队列
        //使用此阻塞队列时num能大于maximumPoolSize
        //并且一次性执行corePoolSize个线程
        BlockingQueue<Runnable> queue2 = new LinkedBlockingQueue<>();

        //有界队列策略,工作队列大小有上限(防止工作队列被无休止的添加)
        //这个队列会保持队列中有capacity个线程在等待,其余线程执行
        BlockingQueue<Runnable> queue3 = new ArrayBlockingQueue<>(3); //capacity = 3


        // 线程池创建线程规则:
        // poolSize:线程池当前线程数,corePoolSize指定的核心线程数,maximumPoolSize指定的最大线程数:
        // 1.当poolSize<corePoolSize时,增加一个线程。
        // 2.当poolSize=corePoolSize时,新任务加入的任务会被放入等待队列。
        // 3.当等待队列列的容量达到上限时,并且poolSize<maximumPoolSize,增加线程来处理任务。
        // 4.当等待队列满了,并且poolSize=maximumPoolSize,那么线程池已经达到极限,会根据饱和策略RejectedExecutionHandler拒绝新的任务。


        //丢弃任务并抛出RejectedExecutionException异常
        //ThreadPoolExecutor.AbortPolicy

        //丢弃任务,但是不抛出异常
        //ThreadPoolExecutor.DiscardPolicy

        //丢弃队列最前面的任务,然后重新提交被拒绝的任务
        //ThreadPoolExecutor.DiscardOldestPolicy

        //由调用线程(提交任务的线程)处理该任务
        //ThreadPoolExecutor.CallerRunsPolicy

        //核心线程数量
        int corePoolSize = 2;
        //最大线程池大小
        int maximumPoolSize = 10;
        //创建线程数量
        int num = 10;
        ExecutorService pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize,
                60, TimeUnit.SECONDS, queue3);

        for (int i = 0; i < num; i++) {
            pool.execute(()->{
                try {
                    Thread.sleep(2000);
                    System.out.println(Thread.currentThread().getName()+"执行了一次run()");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }

        pool.shutdown();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值