【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多线程与并发库高级应用》