传统定时器技术

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16811963/article/details/52029262

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

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之后再启动,如此循环…

展开阅读全文

没有更多推荐了,返回首页