1:Quartz:
Spring配置文件:
<!-- 配置触发器 -->
<!-- 配置JOB类 -->
<bean id="schedulers" class="com.java.activiti.scheduler.schedulers"></bean>
<!-- 配置JobDetail -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref ="schedulers"></property>
<property name="targetMethod" value = "excute"></property>
</bean>
<!-- 配置trigger -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 调度程序 -->
<property name="jobDetail" ref="jobDetail"/>
<!-- 表达式(重点) -->
<property name="cronExpression" value="0/5 * * * * ? *"/>
</bean>
<!-- 配置调度中心 -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
pom文件加入2个jar包:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
package com.java.activiti.scheduler;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@Component
public class schedulers {
private static final Logger logger = Logger.getLogger(schedulers.class);
public void excute() {
logger.debug("开始了哦!");
System.out.println("定时器正在执行");
}
}
2:Timer:
package com.java.activiti.timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
public static void main(String[] args) {
Timer timer = new Timer();
Task task = new Task();
timer.schedule(task, new Date(), 1000);
}
}
class Task extends TimerTask{
public void run(){
System.out.println("Timer开始执行!");
}
}
JDK源码分析一下,Timer原理:
Timer源码
public class Timer { /** * The timer task queue. This data structure is shared with the timer * thread. The timer produces tasks, via its various schedule calls, * and the timer thread consumes, executing timer tasks as appropriate, * and removing them from the queue when they're obsolete. */ private final TaskQueue queue = new TaskQueue(); /** * The timer thread. */ private final TimerThread thread = new TimerThread(queue);