文章目录
一、定时器Timer
1.Timer类的方法使用
1.1 schedule(TimerTask task,Date time)
作用是在指定的日期执行一次某一任务。
-
创建timer.task包,在包下创建MyTask 类
package timer.task; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { System.out.println("任务执行了,时间为:"+System.currentTimeMillis()); } }
-
创建timer.test包,在包下创建Test1类
package timer.test; import timer.task.MyTask; import java.util.Date; import java.util.Timer; public class Test1 { public static void main(String[] args) throws InterruptedException { long nowTime = System.currentTimeMillis(); System.out.println("当前时间为:"+nowTime); long scheduleTime = nowTime + 10000; System.out.println("计划时间为:"+scheduleTime); MyTask task = new MyTask(); Timer timer = new Timer(); Thread.sleep(1000); /** 1.调用Timer实例的schedule方法,将MyTask实例和将转换成Date对象的scheduleTime一起传入 */ timer.schedule(task,new Date(scheduleTime)); } }
即先预先将计划的时间打印出来,然后当执行到schedule方法后,时间达到指定时间时执行task任务,task此时打印出来的时间会跟前者打印出来的时间相同。
任务虽然执行完了,但是进程还未被销毁,说明内部有非守护线程正在执行,即Timer的线程还在运行。
1.2 public void cancel(),针对TimerThread
作用是终止此计时器,丢弃当前所有已安排的任务。这不会干扰当前正在执行的任务。一旦终止计时器,那么它的执行线程也会终止,并且无法根据它安排更多的任务。
即安排任务的mainLoop方法跳出死循环,对执行任务的线程不会有影响。
-
创建timer.test包,在包下创建Test2类
package timer.test; import timer.task.MyTask; import java.util.Date; import java.util.Timer; public class Test2 { public static void main(String[] args) throws InterruptedException { long nowTime = System.currentTimeMillis(); System.out.println("当前时间为:"+nowTime); long scheduleTime = (nowTime + 15000); System.out.println("计划时间为:"+scheduleTime); MyTask myTask = new MyTask(); Timer timer = new Timer(); timer.schedule