定时/设计功用重要运用的就是Timer对象,它在内部照样运用多线程的体式格局举行处置惩罚,所以它和线程手艺照样有非常大的关联。
Timer类重要作用就是设置设计使命,但封装使命的类倒是TimerTask类。TimerTask类是一个抽象类。
实行使命的时候晚于当前时候-----在将来实行的结果
import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask{ @Override public void run() { System.out.println("使命实行了, 时候为:" + new Date()); } } public class Test1 { public static void main(String[] args){ System.out.println("当前时候为: " + new Date()); Calendar calendarRef = Calendar.getInstance(); calendarRef.add(Calendar.SECOND, 10); Date runDate = calendarRef.getTime(); MyTask task = new MyTask(); // 检察Timer组织要领,建立一个Timer就是启动一个新的线程 Timer timer = new Timer(); timer.schedule(task, runDate); // 定时器在某个时候(runDate)实行某个使命(task) } }
免费在线进修视频分享:java视频
Timer中许可有多个TimerTask使命及延时的测试
TimerTask是以行列的体式格局一个一个被递次性地实行,所以实行时候有大概和预期的时候不一致,由于前面的使命有大概斲丧的时候较长,则背面的使命运转的时候也被延后。
import java.util.Date; import java.util.TimerTask; public class MyTaskA extends TimerTask{ @Override public void run() { try { System.out.println("A begin timer, 时候为:" + new Date()); Thread.sleep(20000); System.out.println("A end timer, 时候为:" + new Date()); } catch (InterruptedException e) { e.printStackTrace(); } } } import java.util.Date; import java.util.TimerTask; public class MyTaskB extends TimerTask{ @Override public void run() { System.out.println("B begin timer, 时候为:" + new Date()); System.out.println("B end timer, 时候为:" + new Date()); } } import java.util.Calendar; import java.util.Date; import java.util.Timer; public class Test1 { public static void main(String[] args){ System.out.println("当前时候为: " + new Date()); Calendar calendarRef1 = Calendar.getInstance(); Date runDate1 = calendarRef1.getTime(); System.out.println("A设计时候为: " + runDate1); Calendar calendarRef2 = Calendar.getInstance(); calendarRef2.add(Calendar.SECOND, 10); Date runDate2 = calendarRef2.getTime(); System.out.println("B设计时候为: " + runDate2); MyTaskA task1 = new MyTaskA(); MyTaskB task2 = new MyTaskB(); Timer timer = new Timer(); timer.schedule(task1, runDate1); // 定时器在某个时候(runDate)实行某个使命(task) timer.schedule(task2, runDate2); } }
schedule(TimerTask task, Date firstTime, long period)
该要领的作用是在指定的日期以后按指定的距离周期,无穷轮回地实行某一使命。
import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask{ @Override public void run() { System.out.println("使命入手下手: "+new Date()); System.out.println("mytask..."); System.out.println("使命完毕: "+new Date()); } } import java.util.Calendar; import java.util.Date; import java.util.Timer; public class Run { public static void main(String[] args){ System.out.println("当前时候为:"+new Date()); Calendar c = Calendar.getInstance(); c.add(Calendar.SECOND, 10); Date runDate1 = c.getTime(); System.out.println("设计时候为:"+runDate1); MyTask myTask = new MyTask(); Timer timer = new Timer(); timer.schedule(myTask, runDate1, 10000); } }
TimerTask类的cancel()要领
TimerTask类中的cancel()要领的作用是将本身从使命行列中举行消灭.
import java.util.Date; import java.util.TimerTask; public class MyTaskA extends TimerTask{ @Override public void run() { System.out.println("A run timer="+new Date()); this.cancel(); System.out.println("A使命本身移除本身"); } } import java.util.Date; import java.util.TimerTask; public class MyTaskB extends TimerTask{ @Override public void run() { System.out.println("B run timer="+new Date()); } } import java.util.Calendar; import java.util.Date; import java.util.Timer; public class Run { public static void main(String[] args){ System.out.println("当前时候为:"+new Date()); Calendar c = Calendar.getInstance(); Date runDate1 = c.getTime(); System.out.println("设计时候为:"+runDate1); MyTaskA myTaskA = new MyTaskA(); MyTaskB myTaskB = new MyTaskB(); Timer timer = new Timer(); timer.schedule(myTaskA, runDate1, 4000); timer.schedule(myTaskB, runDate1, 4000); } }
Timer的cancel()要领
和TimerTask类中的cancel()要领消灭本身差别,Timer类中的cancel()要领作用是将使命行列中悉数的使命举行清空。
import java.util.Date; import java.util.TimerTask; public class MyTaskA extends TimerTask{ @Override public void run() { System.out.println("A run timer="+new Date()); this.cancel(); System.out.println("A使命本身移除本身"); } } import java.util.Date; import java.util.TimerTask; public class MyTaskB extends TimerTask{ @Override public void run() { System.out.println("B run timer="+new Date()); } } import java.util.Calendar; import java.util.Date; import java.util.Timer; public class Run { public static void main(String[] args){ System.out.println("当前时候为:"+new Date()); Calendar c = Calendar.getInstance(); Date runDate1 = c.getTime(); System.out.println("设计时候为:"+runDate1); MyTaskA myTaskA = new MyTaskA(); MyTaskB myTaskB = new MyTaskB(); Timer timer = new Timer(); timer.schedule(myTaskA, runDate1, 4000); timer.schedule(myTaskB, runDate1, 4000); } }
schedule(TimerTask task, long delay)
该要领的作用是以实行schedule(TimerTask task, long delay)要领当前的时候为参考时候,在此时候基础上耽误指定的毫秒数后实行一次TimerTask使命。
import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask{ @Override public void run() { System.out.println("A run timer="+new Date()); } } import java.util.Calendar; import java.util.Date; import java.util.Timer; public class Run { public static void main(String[] args) throws InterruptedException{ System.out.println("当前时候为:"+new Date()); Calendar c = Calendar.getInstance(); Date runDate1 = c.getTime(); System.out.println("设计时候为:"+runDate1); MyTask myTask = new MyTask(); Timer timer = new Timer(); timer.schedule(myTask, 7000); // 设计使命耽误7秒后实行 Thread.sleep(10000); timer.cancel(); } }
更多相干文章教程引荐:java入门教程
以上就是Java线程之Timer定时器的细致内容,更多请关注ki4网别的相干文章!