java.util.concurrent.RejectedExecutionException异常发生的时机

Posted lxn_李小牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.util.concurrent.RejectedExecutionException异常发生的时机相关的知识,希望对你有一定的参考价值。

概述

在线程池的使用过程中,我们有时候会遇到下面的异常

那么什么时候会发生这个异常呢

1.线程池关闭以后,再次提交任务

2.提交线程的数量大于最大线程数+任务队列中排队的个数

接下来我们模拟一下

情况一

        ExecutorService service = Executors.newCachedThreadPool();
       //执行下面的会发生RejectedExecutionException
        service.shutdown();
        service.submit(new Task());

情况二

 ThreadPoolExecutor executor = new ThreadPoolExecutor(2,3,30,
                TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(1));
        for (int i = 0; i < 5; i++) 
            executor.execute(new Task());
        

这里我们创建了一个线程池,最大线程数是3,任务队列中允许排队的线程个数是1,然后我omen提交了5个任务,由于此时

提交的任务个数大于最大线程树和排队的个数总和,所以发生了异常


以上是关于java.util.concurrent.RejectedExecutionException异常发生的时机的主要内容,如果未能解决你的问题,请参考以下文章