【发布时间】:2012-11-28 16:02:05
【问题描述】:
我想在我的一个项目中使用石英。我知道作业有一个调度程序和一个线程池。
- 调度程序是否在自己的线程中连续运行并触发作业?
- 如果我在 2 核 CPU 上运行应用程序,一个核会忙于调度线程吗?
【问题讨论】:
标签: java quartz-scheduler
我想在我的一个项目中使用石英。我知道作业有一个调度程序和一个线程池。
【问题讨论】:
标签: java quartz-scheduler
是的,quartz 至少使用 n+1 个线程,其中 1 是在无限循环中运行的调度程序线程,该线程在应该触发的下一个任务之前休眠。 N 是线程池中的工作线程数。您可以使用属性org.quartz.threadPool.threadCount 配置此号码。
【讨论】:
QuartzSchedulerThread 非常不言自明:)。不过,他们的睡眠相当时髦:long now = System.currentTimeMillis(); long waitTime = now + getRandomizedIdleWaitTime(); long timeUntilContinue = waitTime - now; synchronized(sigLock) { try { sigLock.wait(timeUntilContinue); } catch (InterruptedException ignore) { } }
您可以通过例如 Eclipse 运行这些东西来查看它的工作情况,然后在调试视图中您可以看到应用程序的活动和睡眠线程。
Quartz 将创建一个可配置的线程池。每个作业都会在自己的线程中触发(当然,否则它们不能同时运行)。不,它不是一个繁忙的循环,所以调度程序不会为自己申请 CPU。
【讨论】: