传统定时器技术

本系列作为学习张孝祥老师系列视频的笔记。

Timer是一个用来安排未来任务执行的“幕后”线程,任务可以被安排执行一次,也可以以一定的时间间隔被Timer安排循环执行。

Timer类是线程安全的类。

注意:Timer类不提供时间实时性的保证,它是使用Object类的wait方法来安排任务的。

以上翻译自JDK1.8的文档,原文如下:

这里写图片描述
使用Timer类的2个程序,其实现的功能是:5秒后开始打印,每隔2秒,4秒,2秒,依次循环下去打印语句。

首先使用标志位的方法来实现,即根据标志位的交替变换,来确定任务间隔是4秒还是2秒:

import java.util.Timer;
import java.util.TimerTask;

public class TimerStu
{
    private static int flag=0;
    public static void main(String[] args)
    {


        class Timercyc extends TimerTask
        {
            @Override
            public void run()
            {
                flag=(flag+1)%2;
                System.out.println("bob!!!");
                new Timer().schedule(new Timercyc(), 2000+2000*flag);
            }
        }
        System.out.println("准备开始...");
        new Timer().schedule(new Timercyc(), 5000);
    }

}

运行结果就不贴了。

下面用2个任务类来实现上面那个功能,即2个类交替启动:一个类执行2s间隔的打印,然后启动4s间隔的打印,然后4s间隔的打印再启动2s间隔的打印…

程序如下:

import java.util.Timer;
import java.util.TimerTask;

public class TimerStu
{
    public static void main(String[] args)
    {



        System.out.println("准备开始...");
        new Timer().schedule(new TimercycA(), 5000);
    }

}

class TimercycA extends TimerTask
{
    @Override
    public void run()
    {
        System.out.println("bob!!!");
        new Timer().schedule(new TimercycB(),2000);
    }
}
class TimercycB extends TimerTask
{
    @Override
    public void run()
    {
        System.out.println("bob!!!!!");
        new Timer().schedule(new TimercycA(),4000);
    }
}

以上程序相当于连环扣,执行完A,然后让A在2s后启动B,B启动后执行完之后再启动A,让A在4s之后再启动,如此循环…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值