这是几年前写的旧文,此前发布Wordpress小站上,现在又重新整理。算是温故知新,后续会继续整理。如有错误望及时指出,在此感谢。
我们经常在项目中遇到需要定时执行某个业务的操作.
常见的做法是创建一个线程一直运行着,通过sleep方法来达到定时任务的效果.
其实JDK自带java.util.Timer定时器.
可以帮我们达到:
1.在指定时间执行某个动作;
2.在指定一个固定的时间间隔执行某个动作;
Timer是个执行器,我们只需要给它提交TimerTask任务类,它就会按照我们的定义进行执行.
TimerTask非常简单,就是一个线程.
这里我用固定时间间隔来举例
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Timer; import java.util.TimerTask; public class TimeTaskTest1 { public static void main(String[] args) { MyTimerTask metricTimerTask = new MyTimerTask(); Timer timer = new Timer(); // 定义开始等待时间 --- 等待 5 秒 // 1000ms = 1s final long delay = 5000; // 定义每次执行的间隔时间 final long intevalPeriod = 1000 * 5; // schedules the task to be run in an interval // 安排任务在一段时间内运行 printNow("app"); timer.scheduleAtFixedRate(metricTimerTask, delay, intevalPeriod); // timer.schedule(metricTimerTask, delay, intevalPeriod); } public static void printNow(String str) { LocalDateTime now = LocalDateTime.now(); String format = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); System.out.println(str + ":" + format); } static class MyTimerTask extends TimerTask { @Override public void run() { try { printNow("start"); System.out.println("do something..."); Thread.sleep(10000); printNow("stop"); System.out.println("---------------"); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }
总结:
通过定时器,可以帮助我们减少很多不必要的冗余代码.