本系列作为学习张孝祥老师系列视频的笔记。
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之后再启动,如此循环…