newSingleThreadScheduledExecutor連續關閉形成 java.util.concurrent.RejectedExecutionException

Exception in thread "main" java.util.concurrent.RejectedExecutionException:
Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@4e25154f rejected from java.util.concurrent.ScheduledThreadPoolExecutor at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.reject(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(Unknown Source) at java.util.concurrent.Executors$DelegatedScheduledExecutorService.scheduleAtFixedRate(Unknown Source)

線程池默認的處理策略是AbortPolicyjava

用到的線程池spa

 ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();

 

線程池共包括4種拒絕策略,它們分別是:AbortPolicyCallerRunsPolicyDiscardOldestPolicyDiscardPolicy線程

AbortPolicy         -- 當任務添加到線程池中被拒絕時,它將拋出 RejectedExecutionException 異常。
CallerRunsPolicy    -- 當任務添加到線程池中被拒絕時,會在線程池當前正在運行的Thread線程池中處理被拒絕的任務。
DiscardOldestPolicy -- 當任務添加到線程池中被拒絕時,線程池會放棄等待隊列中最舊的未處理任務,而後將被拒絕的任務添加到等待隊列中。
DiscardPolicy       -- 當任務添加到線程池中被拒絕時,線程池將丟棄被拒絕的任務。

目前的需求:要在一個線程裏不斷跑service 執行任務,執行一兩秒再跑一個service 。code

通常來講,當調用了線程池的shutdown()方法之後,不要提交新任務給線程池。但這裏這麼弄不行,發現把shutdown()去掉。blog

發現並沒不停生成新線程,問題基本解決。隊列

相關文章
相關標籤/搜索