Thread实现定时任务
public class TestDemo {
private static int count = 0;
public static void main(String[] args) {
// 基于Thread实现定时任务
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) {
try {
// 每隔 1s 执行任务
Thread.sleep(1000);
System.out.println(“count: ” + count);
count ++;
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
new Thread(runnable).start();
}
}
TimeTask实现定时任务
private static int count = 0;
public static void timerTaskTest() {
// 基于Thread实现定时任务
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("count: " + count);
count ++;
}
};
// 定义触发规则
Timer timer = new Timer();
// 天数
long delay = 0;
// 秒数
long period = 1000;
timer.scheduleAtFixedRate(timerTask, delay, period);
}
线程池实现定时任务
private static int count = 0;
public static void threadSchedulerTest() {
// 基于Thread实现定时任务
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("count: " + count);
count ++;
}
};
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);
}
Quartz实现定时任务
引入依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
编写任务
public class MyJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("quartz MyJob date:" + new Date().getTime());
}
}
编写调度器
public static void test4() throws Exception {
//1.创建Scheduler的工厂
SchedulerFactory sf = new StdSchedulerFactory();
//2.从工厂中获取调度器实例
Scheduler scheduler = sf.getScheduler();
//3.创建JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withDescription("this is a ram job") //job的描述
.withIdentity("ramJob", "ramGroup") //job 的name和group
.build();
//任务运行的时间,SimpleSchedle类型触发器有效
long time= System.currentTimeMillis() + 3*1000L; //3秒后启动任务
Date statTime = new Date(time);
//4.创建Trigger
//使用SimpleScheduleBuilder或者CronScheduleBuilder
Trigger trigger = TriggerBuilder.newTrigger()
.withDescription("")
.withIdentity("ramTrigger", "ramTriggerGroup")
//.withSchedule(SimpleScheduleBuilder.simpleSchedule())
.startAt(statTime) //默认当前时间启动
.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次
.build();
//5.注册任务和定时器
scheduler.scheduleJob(jobDetail, trigger);
//6.启动 调度器
scheduler.start();
}