weixin_42509558 2013-11-25 17:31
浏览 725
已采纳

为何Executors创建的定时任务会自动停止

我在网站后台添加一个定时任务,方式是Executors.new...创建,然后添加被执行的Runnable对象,每2个小时执行一次,现在发现大概两个月后定时任务会自动停止,而且没有任何异常抛出,求朋友帮忙分析下

  • 写回答

3条回答 默认 最新

  • mingxuxu 2013-11-26 11:44
    关注

    不是很确定问题出现在哪里,但是可以做如下两件事情:

    1. 监控一下Queue:实际上Executors创建的是ScheduledThreadPoolExecutor这个类的对象,做强制类型转换然后调用 BlockingQueue getQueue() 这个方法,定时将Queue的数量输出到日志里面,看任务队列是否有变化;

    2. 监控RejectException:实际上默认的线程池有个个人认为很不好的地方,就是大家都习惯于使用Executors创建线程池,所以很多人都不知道线程池实际上有时候会拒绝掉一个任务的(具体算法不说了),而默认的处理方式是直接丢弃,解决的方法是直接使用public ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler)这个构造器,将拒绝掉的线程监控起来(比如记录到日志里面),这样就可以知道哪些任务是拒绝了的。

    以上No.1是看线程池是否还在正常工作,No.2是看是否任务有没有被正常执行(是否被抛弃了)。

    另外说一点,其实题主的需求比较适合使用Quartz来实现,个人觉得默认的ScheduledThreadPoolExecutor不是很好用,实现也比较复杂。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?