Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task java.[email protected]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)
线程池默认的处理策略是AbortPolicy
用到的线程池
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
线程池共包括4种拒绝策略,它们分别是:AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy和DiscardPolicy。
AbortPolicy -- 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException 异常。 CallerRunsPolicy -- 当任务添加到线程池中被拒绝时,会在线程池当前正在运行的Thread线程池中处理被拒绝的任务。 DiscardOldestPolicy -- 当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。 DiscardPolicy -- 当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。
目前的需求:要在一个线程里不断跑service 执行任务,执行一两秒再跑一个service 。
一般来说,当调用了线程池的shutdown()
方法以后,不要提交新任务给线程池。但这里这么弄不行,发现把shutdown()去掉。
发现并没不停生成新线程,问题基本解决。
原文地址:https://www.cnblogs.com/tk55/p/11160292.html
时间: 2024-11-02 15:37:58