spring 定时任务同步,就是同类的任务前一个没有执行完成,即使时间到了,下一个任务也不可以执行,只通退出。一真等到前一个任务完成以后,下个任务才可以执行。
一般用于读文件,同一时间内只能由一个线程进行操作时使用
实现的方式有俩种
今天先介绍第一种
package com.shengyidi.app.task;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class QuartzTestP extends QuartzJobBean {
private static boolean flag = true;
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
if (getFlag()) {
testMethod();
flag = true;
} else {
System.out.println(Thread.currentThread().getName() + "out");
}
}
private void testMethod() {
System.out.println("\n\n_______________" + Thread.currentThread().getName() + "_start________________________");
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
try {
Thread.currentThread().sleep(30000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("\n\n_______________" + Thread.currentThread().getName() + "_end________________________");
}
private static boolean getFlag() {
synchronized (QuartzJobBean.class) {
if (flag == true) {
flag = false;
return true;
}
}
return flag;
}
}
xml
<bean id="testP" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>com.shengyidi.app.task.QuartzTestP</value> </property> </bean> <bean id="test" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="testP" /> </property> <property name="cronExpression"> <value>0 /1 * * * ?</value> </property> </bean> <!-- runQuartz--> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <!-- <ref bean="cronReportTrigger1" /> <ref bean="cronReportTrigger2" /> --> <ref bean="test" /> </list> </property> </bean>
测试结果数据
_______________org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1_start________________________ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 0 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 1 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-2out org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 2 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 3 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3out org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 4 _______________org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1_end________________________ _______________org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4_start________________________ org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4 0 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4 1 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4 2 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-5out org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4 3 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4 4 org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-6out _______________org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-4_end________________________