JAVA的定时器总结(二)

2014-11-24 07:43:14 · 作者: · 浏览: 1
Rate与schedule的区别 * 证明scheduleAtFixedRate方法即使发生延迟的时候也是线程安全的。 * @author HaiCheng */ public class TimerTest2 { public static void main(String[] args) { final Timer t1= new Timer(); t1.schedule(new TimerTask() { int count=0; long flag=0;//时间标记 @Override public void run() { if(count!=0){ System.out.println("间隔时间---->"+(new Date().getTime()-flag)+"----count的值---->"+count); } flag=new Date().getTime();//上面那行先执行,下面这行后执行的 时间会略有偏差 ,差不多2毫秒左右 count++; if(count==3){ try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(count==25){ t1.cancel(); } } }, 0, 100); } }
执行结果:

间隔时间---->100----count的值---->1
间隔时间---->100----count的值---->2
间隔时间---->2000----count的值---->3
间隔时间---->100----count的值---->4
间隔时间---->100----count的值---->5
间隔时间---->100----count的值---->6
间隔时间---->100----count的值---->7
间隔时间---->100----count的值---->8
间隔时间---->100----count的值---->9
间隔时间---->100----count的值---->10
间隔时间---->100----count的值---->11
间隔时间---->100----count的值---->12
间隔时间---->100----count的值---->13
间隔时间---->100----count的值---->14
间隔时间---->100----count的值---->15
间隔时间---->100----count的值---->16
间隔时间---->100----count的值---->17
间隔时间---->100----count的值---->18
间隔时间---->101----count的值---->19
间隔时间---->100----count的值---->20
间隔时间---->100----count的值---->21
间隔时间---->100----count的值---->22
间隔时间---->100----count的值---->23
间隔时间---->100----count的值---->24


将上面例子的schedule方法换成scheduleAtFixedRate 执行结果变为:

间隔时间---->100----count的值---->1
间隔时间---->100----count的值---->2
间隔时间---->2000----count的值---->3
间隔时间---->0----count的值---->4
间隔时间---->0----count的值---->5
间隔时间---->0----count的值---->6
间隔时间---->0----count的值---->7
间隔时间---->0----count的值---->8
间隔时间---->0----count的值---->9
间隔时间---->0----count的值---->10
间隔时间---->0----count的值---->11
间隔时间---->0----count的值---->12
间隔时间---->0----count的值---->13
间隔时间---->0----count的值---->14
间隔时间---->0----count的值---->15
间隔时间---->0----count的值---->16
间隔时间---->0----count的值---->17
间隔时间---->0----count的值---->18
间隔时间---->0----count的值---->19
间隔时间---->0----count的值---->20
间隔时间---->0----count的值---->21
间隔时间---->0----count的值---->22
间隔时间---->98----count的值---->23
间隔时间---->100----count的值---->24

通过执行结果间隔时间的区别我们很容易区别开这两个方法的使用。

通过count的值打印出的顺序是对的,没有重复的,说明scheduleAtFixedRate 方法的任务发生延迟的时候也不会出现线程安全问题。