http://www./605475.html
使用 quartz 1.6.1 上出现了一个并发的问题。 由于有多个 Job 几乎同时并发,有时导致 Quartz 陷入死等状态,再也不执行任务了。 对应 src: http://svn./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 中。 |
|