当一个石英作业触发时,它是一个新的作业类实例吗?

MaV*_*ldo 12 java quartz-scheduler job-scheduling spring-3

我对Quartz很新,我对工作生命周期有些怀疑.

假设我有一个单独的工作配置来做一些事情.

这项工作开始并结束其工作.当它再次触发它是同一个实例(可能设置为睡眠并由调度程序唤醒)或者它是一个新的作业实例(一旦作业结束它就被杀死,当再次满足触发条件时,创建一个新的作业实例) ?

我问这样的问题,因为当我调试我的应用程序(带有石英支持的Spring 3 mvc)时,我看到作业的新实例,并且每次触发作业时都会打开SimpleThreadPool $ WorkerThreadRun()的新线程,以便SimpleThreadPool $ WorkerThreadRun()线程堆积,永不终止.

我只是想知道这种行为是否正常还是我必须填补记忆;-)

谁能给我一些解释?提前致谢.

Tom*_*icz 15

每次想要触发该作业时,Quartz都会创建新作业类的实例.假设您有数十万个作业计划很少触发 - 将所有这些作业保留在内存中会浪费内存.

但是,如果你使用Quartz的Spring支持,尤其是MethodInvokingJobDetailFactoryBeanSpring,它将处理你的作业的生命周期(它基本上调用你的一个bean的指定方法).但在您的应用程序中似乎并非如此.

当然,在完成作业并且没有其他引用指向它(这是正常情况)之后,垃圾收集器最终将释放作业占用的内存.

最后关于线程 - Quartz创建一个固定的工作线程池(参见org.quartz.threadPool.threadCount配置选项).每次运行作业时,Quartz都可能决定使用不同的线程 - 但不会为每个触发器创建新的线程.