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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值