Timer定时器:
时间间隔示意:
例子一:
public class TestTimer {
private static Timer timer = new Timer();
private static Logger logger = LoggerFactory.getLogger("testtimer");
public static void main(String[] args) {
logger.info("开始------>{}", getNow());
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
logger.info("我是延时任务------>{}", getNow());
}
}, 2000L, 1000L);
// 结果:
// 16:20:28.710 [main] INFO testtimer - 开始------>2022-02-03 04:20:28
//16:20:30.723 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:30
//16:20:31.722 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:31
//16:20:32.718 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:32
//16:20:33.723 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:33
//16:20:34.721 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:34
//16:20:35.722 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:35
//16:20:36.720 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:36
//16:20:37.718 [Timer-0] INFO testtimer - 我是延时任务------>2022-02-03 04:20:37
}
public static String getNow() {
Date date = new Date(System.currentTimeMillis());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return dateFormat.format(date);
}
}
例子二:
public class TestTimer {
private static Timer timer = new Timer();
private static Logger logger = LoggerFactory.getLogger("testtimer");
private static Integer time = 0;
public static void main(String[] args) {
logger.info("开始------>{}", getNow());
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
time++;
logger.info(time + "号延时任务开始------>{}", getNow());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info(time + "号延时任务结束------>{}", getNow());
}
}, 2000L, 2000L);
// 结果:
// 16:25:24.854 [main] INFO testtimer - 开始------>2022-02-03 04:25:24
//16:25:26.882 [Timer-0] INFO testtimer - 1号延时任务开始------>2022-02-03 04:25:26
//16:25:27.894 [Timer-0] INFO testtimer - 1号延时任务结束------>2022-02-03 04:25:27
//16:25:28.881 [Timer-0] INFO testtimer - 2号延时任务开始------>2022-02-03 04:25:28
//16:25:29.887 [Timer-0] INFO testtimer - 2号延时任务结束------>2022-02-03 04:25:29
//16:25:30.881 [Timer-0] INFO testtimer - 3号延时任务开始------>2022-02-03 04:25:30
//16:25:31.886 [Timer-0] INFO testtimer - 3号延时任务结束------>2022-02-03 04:25:31
//16:25:32.880 [Timer-0] INFO testtimer - 4号延时任务开始------>2022-02-03 04:25:32
//16:25:33.887 [Timer-0] INFO testtimer - 4号延时任务结束------>2022-02-03 04:25:33
//16:25:34.877 [Timer-0] INFO testtimer - 5号延时任务开始------>2022-02-03 04:25:34
//16:25:35.884 [Timer-0] INFO testtimer - 5号延时任务结束------>2022-02-03 04:25:35
//16:25:36.881 [Timer-0] INFO testtimer - 6号延时任务开始------>2022-02-03 04:25:36
//16:25:37.887 [Timer-0] INFO testtimer - 6号延时任务结束------>2022-02-03 04:25:37
}
public static String getNow() {
Date date = new Date(System.currentTimeMillis());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return dateFormat.format(date);
}
}
Thread.sleep():
/**
* Causes the currently executing thread to sleep (temporarily cease
* execution) for the specified number of milliseconds, subject to
* the precision and accuracy of system timers and schedulers. The thread
* does not lose ownership of any monitors.
*
* @param millis
* the length of time to sleep in milliseconds
*
* @throws IllegalArgumentException
* if the value of {@code millis} is negative
*
* @throws InterruptedException
* if any thread has interrupted the current thread. The
* <i>interrupted status</i> of the current thread is
* cleared when this exception is thrown.
*/
public static native void sleep(long millis) throws InterruptedException;
上面的定时任务已经用到了,入参是毫秒数,当前线程沉睡的毫秒数