Java实现定时任务的多种方式
Java实现定时任务的多种方式
1、Thread类中Thread.sleep(1000); //在while(true)循环内,表示每个1秒执行一次
2、使用Timer类执行定时任务
/**
* 使用Timer类实现定时任务
*/
public class Demo02 {
public static void main(String[] args) {
TimerTask timerTask = new TimerTask() {
public void run() {
System.out.println(“hello”);
}
};
Timer timer = new Timer();
//执行任务 任务延迟多久开始 任务每隔多久执行一次
timer.scheduleAtFixedRate(timerTask, delay, period);
}
}
3、使用juc包下的ScheduledExecutorService类
public class Test {
static int count = 0;
public static void main(String[] args) {
ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
pool.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println(“hello”);
}
//任务延迟0秒执行,每隔2秒执行一次
}, 0, 2, TimeUnit.SECONDS);
}
}
4、使用quartz框架
引入pom依赖
<dependencies>
<!-- 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>
</dependencies>
任务调度类,需要实现Job接口
public class MyJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("hello");
}
}
启动类
//1.创建Scheduler的工厂
SchedulerFactory sf = new StdSchedulerFactory();
//2.从工厂中获取调度器实例
Scheduler scheduler = sf.getScheduler();
//3.创建JobDetail
JobDetail jb = JobBuilder.newJob(MyJob.class)
.withDescription("this is a job") //job的描述
.withIdentity("Job", "Mygroup") //job 的name和group
.build();
//任务运行的时间,SimpleSchedle类型触发器有效
long time= System.currentTimeMillis() + 3*1000L; //3秒后启动任务
Date statTime = new Date(time);
//4.创建Trigger
//使用SimpleScheduleBuilder或者CronScheduleBuilder
Trigger t = TriggerBuilder.newTrigger()
.withDescription("")
.withIdentity("Trigger", "TriggerGroup")
//.withSchedule(SimpleScheduleBuilder.simpleSchedule())
.startAt(statTime) //默认当前时间启动
.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次
.build();
//5.注册任务和定时器
scheduler.scheduleJob(jb, t);
//6.启动 调度器
scheduler.start();
cron表达式:
http://cron.qqe2.com/
5、springboot内置定时任务调度
@Component
public class ScheduledTasks {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
//每隔5秒打印一次
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}
}
在Spring Boot的主类App.java中加入@EnableScheduling注解,启用定时任务的配置
还没有评论,来说两句吧...