Java实现定时任务的多种方式

一时失言乱红尘 2022-05-14 13:30 291阅读 0赞

Java实现定时任务的多种方式

1、Thread类中Thread.sleep(1000); //在while(true)循环内,表示每个1秒执行一次

2、使用Timer类执行定时任务

  1. /**
  2. * 使用Timer类实现定时任务
  3. */
  4. public class Demo02 {
  5. public static void main(String[] args) {
  6. TimerTask timerTask = new TimerTask() {
  7. public void run() {
  8. System.out.println(“hello”);
  9. }
  10. };
  11. Timer timer = new Timer();
  12. //执行任务 任务延迟多久开始 任务每隔多久执行一次
  13. timer.scheduleAtFixedRate(timerTask, delay, period);
  14. }
  15. }

3、使用juc包下的ScheduledExecutorService类

  1. public class Test {
  2. static int count = 0;
  3. public static void main(String[] args) {
  4. ScheduledExecutorService pool = Executors.newScheduledThreadPool(5);
  5. pool.scheduleAtFixedRate(new Runnable() {
  6. public void run() {
  7. System.out.println(“hello”);
  8. }
  9. //任务延迟0秒执行,每隔2秒执行一次
  10. }, 0, 2, TimeUnit.SECONDS);
  11. }
  12. }

4、使用quartz框架

引入pom依赖

  1. <dependencies>
  2. <!-- quartz -->
  3. <dependency>
  4. <groupId>org.quartz-scheduler</groupId>
  5. <artifactId>quartz</artifactId>
  6. <version>2.2.1</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.quartz-scheduler</groupId>
  10. <artifactId>quartz-jobs</artifactId>
  11. <version>2.2.1</version>
  12. </dependency>
  13. </dependencies>

任务调度类,需要实现Job接口

  1. public class MyJob implements Job {
  2. public void execute(JobExecutionContext context) throws JobExecutionException {
  3. System.out.println("hello");
  4. }
  5. }

启动类

  1. //1.创建Scheduler的工厂
  2. SchedulerFactory sf = new StdSchedulerFactory();
  3. //2.从工厂中获取调度器实例
  4. Scheduler scheduler = sf.getScheduler();
  5. //3.创建JobDetail
  6. JobDetail jb = JobBuilder.newJob(MyJob.class)
  7. .withDescription("this is a job") //job的描述
  8. .withIdentity("Job", "Mygroup") //job 的name和group
  9. .build();
  10. //任务运行的时间,SimpleSchedle类型触发器有效
  11. long time= System.currentTimeMillis() + 3*1000L; //3秒后启动任务
  12. Date statTime = new Date(time);
  13. //4.创建Trigger
  14. //使用SimpleScheduleBuilder或者CronScheduleBuilder
  15. Trigger t = TriggerBuilder.newTrigger()
  16. .withDescription("")
  17. .withIdentity("Trigger", "TriggerGroup")
  18. //.withSchedule(SimpleScheduleBuilder.simpleSchedule())
  19. .startAt(statTime) //默认当前时间启动
  20. .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) //两秒执行一次
  21. .build();
  22. //5.注册任务和定时器
  23. scheduler.scheduleJob(jb, t);
  24. //6.启动 调度器
  25. scheduler.start();

cron表达式:

http://cron.qqe2.com/

5、springboot内置定时任务调度

  1. @Component
  2. public class ScheduledTasks {
  3. private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
  4. //每隔5秒打印一次
  5. @Scheduled(fixedRate = 5000)
  6. public void reportCurrentTime() {
  7. System.out.println("现在时间:" + dateFormat.format(new Date()));
  8. }
  9. }

在Spring Boot的主类App.java中加入@EnableScheduling注解,启用定时任务的配置

发表评论

表情:
评论列表 (有 0 条评论,291人围观)

还没有评论,来说两句吧...

相关阅读