如何避免在Quartz中同时运行两个作业?

use*_*880 8 java quartz-scheduler

我在下面编写代码,我正在运行两个工作.首先是10秒的间隔,另一个是3秒的间隔.但最终在某些时候它们会同时执行.有没有机制来避免这种情况

    JobDetail jDetail = new JobDetail("Job1", "group1", MyJob.class);
    CronTrigger crTrigger = new CronTrigger("cronTrigger", "group1", "0/10 * * * * ?");
    sche.scheduleJob(jDetail, crTrigger);

    jDetail = new JobDetail("Job2","group2",MyJob2.class);
    crTrigger = new CronTrigger("cronTrigger2","group2","0/3 * * * * ?");
    sche.scheduleJob(jDetail, crTrigger);
Run Code Online (Sandbox Code Playgroud)

Tho*_*gum 2

您可以创建一个辅助对象来使两个作业同步:

//In the base class 
public static Object lock = new Object();

//In the first class
public void execute() {
    synchronized(lock) {
        //do stuff
    }
}

//In the second class
public void execute() {
    synchronized(lock) {
        //do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

有关同步的更多信息,请访问: http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html