今天在改定时任务的时候,发现定时任务整合了ScheduledExecutorService 定时器,来记录一下定时器的简单使用方法。
定时器的作用: 可以定期执行、或者延期执行一个任务。
使用方法如下:
一、创建定时器执行体,即定时器要执行的任务
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* 测试定时器.
*
* @author linzp
* @version 1.0.0
* CreateDate 2020/9/18 17:05
*/
public class RunWork implements Runnable {
/**
* 这是任务执行体,打印当前的时间.
*/
@Override
public void run() {
Logger logger = LoggerFactory.getLogger(RunWork.class);
logger.info("任务执行了>>>>当前时间 {}", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
}
}
这里执行的任务很简单,就把当前的时间打印出来
二、创建定时器,并设置周期执行
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author linzp
* @version 1.0.0
* CreateDate 2020/9/18 17:04
*/
public class TimerDemo {
public static void main(String[] args) {
//1.创建线程池 它可安排命令给定延迟后运行或定期执行
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
//2.执行任务 (initialDelay为延迟时间,此处延迟0s,立即执行,perio为周期,此处每5s执行一次,后面为时间单位)
scheduledExecutorService.scheduleAtFixedRate(new RunWork(), 0, 5, TimeUnit.SECONDS);
}
}
三、运行结果
17:17:01.167 [pool-1-thread-1] INFO com.example.demo.task.RunWork - 任务执行了>>>>当前时间 2020-09-18 05:17:01
17:17:06.026 [pool-1-thread-1] INFO com.example.demo.task.RunWork - 任务执行了>>>>当前时间 2020-09-18 05:17:06
17:17:11.025 [pool-1-thread-1] INFO com.example.demo.task.RunWork - 任务执行了>>>>当前时间 2020-09-18 05:17:11
17:17:16.025 [pool-1-thread-1] INFO com.example.demo.task.RunWork - 任务执行了>>>>当前时间 2020-09-18 05:17:16
17:17:21.026 [pool-1-thread-1] INFO com.example.demo.task.RunWork - 任务执行了>>>>当前时间 2020-09-18 05:17:21
17:17:26.025 [pool-1-thread-1] INFO com.example.demo.task.RunWork - 任务执行了>>>>当前时间 2020-09-18 05:17:26
17:17:31.025 [pool-1-thread-1] INFO com.example.demo.task.RunWork - 任务执行了>>>>当前时间 2020-09-18 05:17:31