zoukankan      html  css  js  c++  java
  • 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)

    线程池默认的处理策略是AbortPolicy

    用到的线程池

     ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();

    线程池共包括4种拒绝策略,它们分别是:AbortPolicyCallerRunsPolicyDiscardOldestPolicyDiscardPolicy

    AbortPolicy         -- 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException 异常。
    CallerRunsPolicy    -- 当任务添加到线程池中被拒绝时,会在线程池当前正在运行的Thread线程池中处理被拒绝的任务。
    DiscardOldestPolicy -- 当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
    DiscardPolicy       -- 当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。

    目前的需求:要在一个线程里不断跑service 执行任务,执行一两秒再跑一个service 。

    一般来说,当调用了线程池的shutdown()方法以后,不要提交新任务给线程池。但这里这么弄不行,发现把shutdown()去掉。

    发现并没不停生成新线程,问题基本解决。

  • 相关阅读:
    UVa-1218
    Uva-1220
    UVa-10003
    UVa-1625
    UVa-11584
    UVa-12563
    UVa-12166 Equilibrium Mobile
    加油
    UVa-10129
    不再刷“水题”!
  • 原文地址:https://www.cnblogs.com/tk55/p/11160292.html
Copyright © 2011-2022 走看看