1. 程式人生 > >java.util.concurrent.RejectedExecutionException異常發生的時機

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個任務,由於此時

提交的任務個數大於最大執行緒樹和排隊的個數總和,所以發生了異常