【Java多线程与并发库应用】02 传统定时器技术

时间:2022-06-21 00:11:47

【Java多线程与并发库应用】02 传统定时器技术

定时器和定时器任务的用处:

很简单,通过定时的完成某项任务。

关于定时器,主要是涉及到Timer和TimerTask两个类。

  • Timer表示定时器,其常用的方法是schedule,调度方法。
  • TimerTask表示定时任务,它是一个抽象类,其中包含一个抽象方法run。

传统定时器技术代码演示

单次定时操作

/**
* description:
*
* @author liyazhou
* @since 2017-08-13 19:58
*/

public class TraditionalTimerTest {

public static void main(String... args){
new Timer().schedule(new TimerTask() { // 定时器的调度方法schedule接收一个定时器任务对象,其中的run方法体就是要执行的任务
@Override
public void run() {
System.out.println("execute task!" );
}
}, 5000); // 单次执行,延迟5s执行
}
}

等间隔时间内连环执行

/**
* description:
*
* @author liyazhou
* @since 2017-08-13 19:58
*/

public class TraditionalTimerTest {

public static void main(String... args){
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println("bombing!" );
}
}, 5000, 1000); // 等间隔时间内连环执行
}
}

时快时慢不断执行定时器任务

/**
* description:
*
* @author liyazhou
* @since 2017-08-13 19:58
*/

public class TraditionalTimerTest {

private static int counter = 0; // 内部类不能声明静态变量
public static void main(String... args){

class MyTimerTask extends TimerTask{
@Override
public void run() {
counter = (counter + 1) %2;
System.out.println("MyTimerTask execute.");
new Timer().schedule(new MyTimerTask(), // 递归地调用
2000 * counter); // 每个0s或者2s执行
}
}

new Timer().schedule(new MyTimerTask(), 1000);
}
}

参考
《Java多线程与并发库高级应用》