嗨朋友, 我正面临当前发展中的一个关键问题。实际上我使用Quartz库来安排我在这个应用程序中的任务。我已经确定了一个特定的时间来调用特定的方法。但是有一段时间,如果方法比已经固定的时间花费更多的执行时间,那么这个方法再次被调用,所以我的所有处理都重复执行。我试图同步关键字,但它无法正常工作。
我正在使用代码计划我的任务 -
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.TriggerBuilder.*;
public class BrainScheluder {
public BrainScheluder()
{
try {
// Grab the Scheduler instance from the Factory
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// Start scheduler here
scheduler.start();
// define the job and tie it to our BrainJob class
JobDetail job = newJob(BrainJob.class)
.withIdentity("job1", "group1")
.build();
// Trigger the job to run now, and then repeat every 60 seconds
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(30)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(job, trigger);
// End scheduler here
//scheduler.shutdown();
} catch (SchedulerException se) {
se.printStackTrace();
}
}
}
我正在使用代码执行我的工作
import java.util.LinkedHashMap;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.my.Vi;
public class BrainJob implements Job {
Vi v = null;
public BrainJob() {
v= new Vi();
}
public synchronized void execute(JobExecutionContext context)
throws JobExecutionException
{
v.myWork();
}
}
myWork of Vi类的方法用于在数据大小时处理某些数据,然后重复调用此函数。并且只要数据不是很大,那么就可以很好地调用这个函数。
所以
我们可以根据处理时间要求控制myWork()方法调用。我的意思是我们可以同步myWork()方法吗?这里。
请帮帮我。 感谢
答案 0 :(得分:1)
如果我理解得很好,你可以在myWork()
启动时设置一个标志(会话或某种上下文,数据库,它取决于你正在使用的其他东西),然后在每次执行之前检查该旗帜的状态。如果方法尚未完成其工作,则不要再次启动它。一旦完成,重置标志,当下一个预定时间到来时,它将正常执行。