Java线程定时器定时器用法详细总结

  

定时/计划功能主要使用的就是定时器对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联。

  

定时器类主要作用就是设置计划任务,但封装任务的类却是TimerTask类.TimerTask类是一个抽象类。

  

执行任务的时间晚于当前时间- - - - - -在未来执行的效果

        进口java.util.Date;   进口java.util.TimerTask;      公开课MyTask延伸TimerTask {   @Override   公共空间run () {   system . out。println(“任务执行了,时间为:" +新日期());   }   }      公开课Test1 {   公共静态void main (String [] args) {   system . out。println(“当前时间为:“新日期+ ());   日历calendarRef=Calendar.getInstance ();   calendarRef.add(日历。第二,10);   日期runDate=calendarRef.getTime ();   MyTask任务=new MyTask ();//查看定时器构造方法,创建一个计时器就是启动一个新的线程   计时器计时=new计时器();   计时器。日程安排(任务,runDate);//定时器在某个时间(runDate)执行某个任务(任务)   }   }      

定时器中允许有多个TimerTask任务及延时的测试

  

TimerTask是以队列的方式一个一个被顺序性地执行,所以执行时间有可能和预期的时间不一致,因为前面的任务有可能消耗的时间较长,则后面的任务运行的时间也被延后。

        进口java.util.Date;   进口java.util.TimerTask;   公开课MyTaskA延伸TimerTask {   @Override   公共空间run () {   尝试{   system . out。println(“一个定时器,开始时间为:" +新日期());   thread . sleep (20000);   system . out。println(“一个计时器结束,时间为:" +新日期());   }捕捉(InterruptedException e) {   e.printStackTrace ();   }   }   }      进口java.util.Date;   进口java.util.TimerTask;      公开课MyTaskB延伸TimerTask {   @Override   公共空间run () {   system . out。println (" B开始定时器,时间为:" +新日期());   system . out。println (" B计时器结束,时间为:" +新日期());   }   }      进口java.util.Calendar;   进口java.util.Date;   进口java.util.Timer;      公开课Test1 {   公共静态void main (String [] args) {   system . out。println(“当前时间为:“新日期+ ());   日历calendarRef1=Calendar.getInstance ();   日期runDate1=calendarRef1.getTime ();   system . out。println(“一个计划时间为:" + runDate1);   日历calendarRef2=Calendar.getInstance ();   calendarRef2.add(日历。第二,10);   日期runDate2=calendarRef2.getTime ();   system . out。println (" B计划时间为:" + runDate2);   MyTaskA task1=new MyTaskA ();   MyTaskB task2=new MyTaskB ();   计时器计时=new计时器();   计时器。计划(task1 runDate1);//定时器在某个时间(runDate)执行某个任务(任务)   计时器。日程安排(task2 runDate2);   }   }      

时间表(TimerTask的任务,第一次约会,长期)

  

该方法的作用是在指定的日期之后按指定的间隔周期,无限循环地执行某一任务。

        进口java.util.Date;   进口java.util.TimerTask;      公开课MyTask延伸TimerTask {   @Override   公共空间run () {   system . out。println(“任务开始:“+新日期());   System.out.println (“mytask…”);   system . out。println(“任务结束:“+新日期());   }   }      进口java.util.Calendar;   进口java.util.Date;   进口java.util.Timer;      公共类运行{   公共静态void main (String [] args) {   system . out。println(“当前时间为:“新日期+ ());   日历c=Calendar.getInstance ();   c.add(日历。第二,10);   日期runDate1=c.getTime ();   System.out.println(“计划时间为:“+ runDate1);   MyTask MyTask=new MyTask ();   计时器计时=new计时器();   计时器。日程安排(myTask runDate1 10000);   }   }      

TimerTask类的cancel()方法

  

TimerTask类中的cancel()方法的作用是将自身从任务队列中进行清除。

        进口java.util.Date;   进口java.util.TimerTask;      公开课MyTaskA延伸TimerTask {   @Override   公共空间run () {   system . out。println(“运行计时器=" +新日期());   this.cancel ();   System.out.println(“任务自己移除自己”);   }   }      进口java.util.Date;   进口java.util.TimerTask;      公开课MyTaskB延伸TimerTask {   @Override   公共空间run () {   system . out。println (" B运行计时器=" +新日期());   }   }      进口java.util.Calendar;   进口java.util.Date;   进口java.util.Timer;      公共类运行{   公共静态void main (String [] args) {   system . out。println(“当前时间为:“新日期+ ());   日历c=Calendar.getInstance ();   日期runDate1=c.getTime ();   System.out.println(“计划时间为:“+ runDate1);      MyTaskA MyTaskA=new MyTaskA ();   MyTaskB MyTaskB=new MyTaskB ();      计时器计时=new计时器();   计时器。日程安排(myTaskA runDate1 4000);   计时器。日程安排(myTaskB runDate1 4000);   }      }

Java线程定时器定时器用法详细总结