我终于会写 Java 的定时任务了!( 五 )


如果想要异步,如何异步呢?
异步很简单,使用 @EnableAsync@Async 这两个注解就可以了,如下:
@Slf4j@Component@EnableScheduling@EnableAsyncpublic class TaskDemo {@Async@Scheduled(fixedRate = 2000)public void printTime3() throws InterruptedException {log.info("任务A开始------- {}", LocalDateTime.now());Thread.sleep(2000);log.info("任务A完成------- {}", LocalDateTime.now());}@Async@Scheduled(fixedDelay = 2000)public void printTime4() throws InterruptedException {log.info("任务B开始------- {}", LocalDateTime.now());Thread.sleep(2000);log.info("任务B完成------- {}", LocalDateTime.now());}}控制台输出:
2022-10-25 15:04:05.833INFO 15604 --- [task-1] cn.god23bin.demo.task.TaskDemo: 任务A开始------- 2022-10-25T15:04:05.8332022-10-25 15:04:05.833INFO 15604 --- [task-2] cn.god23bin.demo.task.TaskDemo: 任务B开始------- 2022-10-25T15:04:05.8332022-10-25 15:04:07.833INFO 15604 --- [task-4] cn.god23bin.demo.task.TaskDemo: 任务B开始------- 2022-10-25T15:04:07.8332022-10-25 15:04:07.833INFO 15604 --- [task-3] cn.god23bin.demo.task.TaskDemo: 任务A开始------- 2022-10-25T15:04:07.8332022-10-25 15:04:07.848INFO 15604 --- [task-2] cn.god23bin.demo.task.TaskDemo: 任务B完成------- 2022-10-25T15:04:07.8482022-10-25 15:04:07.848INFO 15604 --- [task-1] cn.god23bin.demo.task.TaskDemo: 任务A完成------- 2022-10-25T15:04:07.8482022-10-25 15:04:09.833INFO 15604 --- [task-5] cn.god23bin.demo.task.TaskDemo: 任务A开始------- 2022-10-25T15:04:09.8332022-10-25 15:04:09.843INFO 15604 --- [task-4] cn.god23bin.demo.task.TaskDemo: 任务B完成------- 2022-10-25T15:04:09.8432022-10-25 15:04:09.843INFO 15604 --- [task-3] cn.god23bin.demo.task.TaskDemo: 任务A完成------- 2022-10-25T15:04:09.8432022-10-25 15:04:09.844INFO 15604 --- [task-6] cn.god23bin.demo.task.TaskDemo: 任务B开始------- 2022-10-25T15:04:09.8432022-10-25 15:04:11.830INFO 15604 --- [task-7] cn.god23bin.demo.task.TaskDemo: 任务A开始------- 2022-10-25T15:04:11.8302022-10-25 15:04:11.845INFO 15604 --- [task-6] cn.god23bin.demo.task.TaskDemo: 任务B完成------- 2022-10-25T15:04:11.8452022-10-25 15:04:11.845INFO 15604 --- [task-5] cn.god23bin.demo.task.TaskDemo: 任务A完成------- 2022-10-25T15:04:11.845总结首先讲了下定时任务是什么?接着讲了有哪些实现方式?对这些方式进行介绍 。
主要的定时任务可以通过以下的方式实现:

  1. 纯手写单线程死循环,配合线程的等待机制的方式(不推荐,麻烦 , 问题多多)
  2. 使用 JDK 提供的 Timer 配合 TimerTask 的方式(不推荐 , 单线程)
  3. 使用 JDK 提供的多线程的 ScheduledExecutorService 的方式(可代替 Timer,多线程的)
  4. 使用 Spring 提供的定时任务的方式(推荐,更加方便,可异步)
当然,除了这些方式 , 还可以使用定时任务框架,比如 Quartz、XXL-JOB、Elastic-Job 等等 。
最后的最后由本人水平所限,难免有错误以及不足之处,屏幕前的靓仔靓女们 如有发现,恳请指出!
最后,谢谢你看到这里,谢谢你认真对待我的努力,希望这篇博客对你有所帮助!
你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!
【我终于会写 Java 的定时任务了!】

推荐阅读