Java--SpringBoot-25-定时任务

简介: 在SpringBoot中,有四种方式来使用定时任务

在SpringBoot中,有四种方式来使用定时任务:

Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。

ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。

Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。

Quartz:这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。

我们今天来运行学习一下知乎上说的这四种定时器,不,先学前两种JDK自带的:

一、Timer

packagecom.xing.studyboot.time;
importjava.time.LocalDateTime;
importjava.util.Timer;
importjava.util.TimerTask;
importjava.util.concurrent.Executors;
importjava.util.concurrent.TimeUnit;
/***  util包的定时,支持* @author xing* @createTime*/publicclassTestTimer {
publicstaticvoidmain(String[] args) {
//一、JDK自带的timer java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。//新建一个任务操作TimerTasktimerTask=newTimerTask() {
@Overridepublicvoidrun() {
System.out.println("执行。。。"+LocalDateTime.now());
      }
    };
Timertimer=newTimer();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。这里10毫秒后开始执行,每3秒执行一次timer.schedule(timerTask,10,3000);
}



二、ScheduledExecutorService

packagecom.xing.studyboot.time;
importjava.util.Date;
importjava.util.Timer;
importjava.util.TimerTask;
importjava.util.concurrent.Executors;
importjava.util.concurrent.ScheduledExecutorService;
importjava.util.concurrent.TimeUnit;
/***  util包的定时,支持* @author xing* @createTime*/publicclassTestTimer {
publicstaticvoidmain(String[] args) {
//二、ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。ScheduledExecutorServiceservice=Executors.newSingleThreadScheduledExecutor();
// 参数:1、任务体 2、首次执行的延时时间 3、任务执行间隔 4、间隔时间单位service.scheduleAtFixedRate(()->System.out.println("task ScheduledExecutorService "+newDate()), 0, 3, TimeUnit.SECONDS);
  }
}

       ScheduledExecutorService 和Timer都是JDK自带的定时器,不过Timer功能比较单一哈,只能在当前时间的x秒后开始并间隔y秒不停的执行。比如间隔是3秒,但是上一次的任务却还没执行完,可能会影响下一个任务,所以可以使用ScheduledExecutorService ,因为不同于Timer,他是分配给不同的线程并发运行,互不影响的。

图片


总结:

       JDK自带的两种定时器,只支持按照相同时间间隔反复执行。

Timer属于单线程同步执行.

ScheduledExecutorService属于多线程并发执行.

       下节学SpringTask和Quartz!



END

目录
相关文章
|
7月前
|
Java 调度 Spring
Java中几种定时任务使用与详解
Java中几种定时任务使用与详解
109 0
|
2月前
|
Java
用java搞定时任务,将hashmap里面的值存到文件里面去
本文介绍了如何使用Java的`Timer`和`TimerTask`类创建一个定时任务,将HashMap中的键值对写入到文本文件中,并提供了完整的示例代码。
43 1
用java搞定时任务,将hashmap里面的值存到文件里面去
|
6月前
|
Java jenkins 持续交付
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
375 3
|
2月前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
166 1
|
5月前
|
Java 调度
java定时任务3分钟一次
7月更文挑战第6天
237 1
|
算法 Java Linux
Java线程常用定时任务算法与应用
Java线程常用定时任务算法与应用
120 0
|
5月前
|
负载均衡 Java 调度
Java中的定时任务实现详解
Java中的定时任务实现详解
|
5月前
|
Java 调度 Spring
Java中的定时任务调度与管理
Java中的定时任务调度与管理
|
5月前
|
监控 Java 调度
使用Java实现高性能的定时任务调度
使用Java实现高性能的定时任务调度
|
6月前
|
XML Java 数据格式
一篇文章讲明白java的常用定时任务的几种方式
一篇文章讲明白java的常用定时任务的几种方式
49 0