package  org.dong.timer;
import  java.util.Timer;
import  java.util.TimerTask;
public  class  TimerTest  {
 
       
       public  static  void  main(String[]  args)
       {
               Timer  timer1=new  Timer();
               Timer  timer2=new  Timer();
               Timer  timer3=new  Timer();
               
               for(int  j=0;j <30;j++)
               {
                       if(j%3==0)
                       timer1.schedule(new  showme(1)  ,  10000);
                       else  if(j%3==1)
                       timer2.schedule(new  showme(3),  10000);
                       else
                       timer3.schedule(new  showme(2),  10000);
               }
 
               
       }
}
class  showme  extends  TimerTask
{
       int  taskName;
       public  showme(int  q)
       {
               taskName=q;
       }
 
       public  void  run()  {
               //  TODO  Auto-generated  method  stub
               System.out.println(taskName);
       }
}
 
输出效果为什么是:
1
1
1
1
1
1
1
1
1
1
3
3
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
我想应该是  123123123123这种顺序的  是不是java编译这个java  文件有什么问题?

解决方案 »

  1.   

    你用一个Timer就可以了
     public  static  void  main(String[]  args)
           {
                   Timer  timer=new  Timer();
                                  
                   for(int  j=0;j <30;j++)
                   {
                           if(j%3==0)
                           timer.schedule(new  showme(1)  ,  1000);
                           else  if(j%3==1)
                           timer.schedule(new  showme(3),  1000);
                           else 
                           timer.schedule(new  showme(2),  1000);
                   }
       
     
                   
           }
      

  2.   

    每一个Timer都会开启一个线程.还有在同一时间点在Timer上运行的任务,不是按先进先运行的...,Timer是不做保障的.Timer只保证每个时间点能运行这个时间的任务,而同一个时间点是不做任务次序的保证.   在Timer中的源码中,可以清楚的看到在每次获取一个执行任务时,同时会把这个任务从Q里删节,并把最后一个得到第一位,并执行fixDown,进行向下排序,而向下排序,当碰到执行时间和自已相等或大于的就停止了.所以一般在同一时间点有多个任务时,他的第一个任务执行后,会按后进先出的执行.