关于 quartz 1.6.1 的一个死等问题,导致任务不执行

使用 quartz 1.6.1 上出现了一个并发的问题。

由于有多个 Job 几乎同时并发,有时导致 Quartz 陷入死等状态,再也不执行任务了。

具体 bug 可见:http://jira.opensymphony.com/browse/QUARTZ-707?page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel

对应 src: http://svn.terracotta.org/fisheye/browse/Quartz/trunk/src/java/org/quartz/core/QuartzSchedulerThread.java?r=865

当任务大量并发,而执行的时间又不固定,可能等于或者超过两次任务执行的间隔时,容易出现这个问题。


原因是在 QuartzSchedulerThread 的 296 行有个 wait(time) 方法,其中的 time 有可能是 0,导致死等。

这已经在 quartz 1.6.2 以后的版本中修复了。


花了两天时间研究,终于发现了这个问题。

期间获得了一个方法,在linux系统下,若线程陷入困境,可用 kill -3 pid 的方法打印出线程的运行状态,

可以看出来各线程分别运行在什么位置。打印输出在标准输出中,比如 tomcat 线程就在 catalina.out 中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值