Java线程之Timer定时器

互联网 19-12-11

定时/计划功能主要使用的就是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定时器的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 定时器
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:学完java能干什么

相关资讯