Thread实现定时任务

  1. public class TestDemo {
  2. private static int count = 0;
  3. public static void main(String[] args) {
  4. // 基于Thread实现定时任务
  5. Runnable runnable = new Runnable() {
  6. @Override
  7. public void run() {
  8. while (true) {
  9. try {
  10. // 每隔 1s 执行任务
  11. Thread.sleep(1000);
  12. System.out.println(“count: + count);
  13. count ++;
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. }
  19. };
  20. new Thread(runnable).start();
  21. }
  22. }

TimeTask实现定时任务

  1. private static int count = 0;
  2. public static void timerTaskTest() {
  3. // 基于Thread实现定时任务
  4. TimerTask timerTask = new TimerTask() {
  5. @Override
  6. public void run() {
  7. System.out.println("count: " + count);
  8. count ++;
  9. }
  10. };
  11. // 定义触发规则
  12. Timer timer = new Timer();
  13. // 天数
  14. long delay = 0;
  15. // 秒数
  16. long period = 1000;
  17. timer.scheduleAtFixedRate(timerTask, delay, period);
  18. }

线程池实现定时任务

  1. private static int count = 0;
  2. public static void threadSchedulerTest() {
  3. // 基于Thread实现定时任务
  4. Runnable runnable = new Runnable() {
  5. @Override
  6. public void run() {
  7. System.out.println("count: " + count);
  8. count ++;
  9. }
  10. };
  11. ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
  12. service.scheduleAtFixedRate(runnable, 1, 1, TimeUnit.SECONDS);
  13. }

Quartz实现定时任务

引入依赖

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

编写任务

  1. public class MyJob implements Job {
  2. public void execute(JobExecutionContext context) throws JobExecutionException {
  3. System.out.println("quartz MyJob date:" + new Date().getTime());
  4. }
  5. }

编写调度器

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