Timer与TimerTask是java中比较常用的类,可以定期重复执行某项任务。虽然Thread同样可以解决问题,但效率上可能就差了些。
顾名思义,Timer应该是个计时器,而TimerTask是需要计时的任务。
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerTest extends TimerTask { private Timer timer; public static void main(String[] args) { TimerTest timerTest= new TimerTest(); timerTest.timer = new Timer(); //立刻开始执行timerTest任务,只执行一次 timerTest.timer.schedule(timerTest,new Date()); //立刻开始执行timerTest任务,执行完本次任务后,隔2秒再执行一次 //timerTest.timer.schedule(timerTest,new Date(),2000); //一秒钟后开始执行timerTest任务,只执行一次 //timerTest.timer.schedule(timerTest,1000); //一秒钟后开始执行timerTest任务,执行完本次任务后,隔2秒再执行一次 //timerTest.timer.schedule(timerTest,1000,2000); //立刻开始执行timerTest任务,每隔2秒执行一次 //timerTest.timer.scheduleAtFixedRate(timerTest,new Date(),2000); //一秒钟后开始执行timerTest任务,每隔2秒执行一次 //timerTest.timer.scheduleAtFixedRate(timerTest,1000,2000); } @Override public void run() { System.out.println("Task is running!"); } }
需要注意的是scheduleAtFixedRate和schedule在参数完全相同的情况下,执行效果是不同的。上面例子中任务只是打印一个字符串,比较简单。但如果任务比较复杂,或者由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则scheduleAtFixedRate方法将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”;而schedule方法的后续执行也将被延迟。所以,在长期运行中,scheduleAtFixedRate执行的频率将正好是指定周期的倒数,schedule 执行的频率一般要稍慢于指定周期的倒数。
另外,TimerTask的构造函数是protected,所以无法再类中直接new一个TimerTask,而只能写一个类继承TimerTask。
知道了如何执行任务,那么如何终止任务呢?TimerTask与Timer都有cancel()方法。
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerTest extends TimerTask { private Timer timer; public static void main(String[] args) { TimerTest timerTest= new TimerTest(); timerTest.timer = new Timer(); //立刻开始执行timerTest任务,执行完本次任务后,隔2秒再执行一次 timerTest.timer.schedule(timerTest,new Date(),2000); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } //结束任务执行,程序终止 timerTest.timer.cancel(); //结束任务执行,程序并不终止,为什么呢,还没想明白 //timerTest.cancel(); } @Override public void run() { System.out.println("Task is running!"); } }
public class AppStoreCacheFlushTask { private static final Logger logger = LoggerFactory.getLogger(AppStoreCacheFlushTask.class); public void start() { TimerTask task = new TimerTask() { @Override public void run() { logger.info("------------executeInit begin-------------"); long t1 = System.currentTimeMillis(); // 初始化应用信息 InitAppInfoInfo.executeInit(Constants.APPSTORE_DPPORTAL_IP, Constants.APPSTORE_DPPORTAL_PORT); long t2 = System.currentTimeMillis(); logger.info("------------executeInit end, costTime={}ms-------------", (t2 - t1)); } }; Timer timer = new Timer("缓存刷新定时器", true); timer.scheduleAtFixedRate(task, new Date(), com.coship.appstore.service.common.Constants.INIT_MINUTE * 60 * 1000); } }
相关推荐
Timer与TimerTask(计时器)
下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。 需要注意的问题主要有两点: 1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句 2、只能在UI主线程中更新...
Timer和TimerTask的使用 关于java函数中timer类的相关代码 和使用
本文首先设计一个单次定时器Timer+TimerTask,然后再次基础上设计一个循环定时器。
ICE_Timer and TimerTask相关
Java中的Timer和TimerTask简介(附完整代码实例)。 在Java中,Timer和TimerTask是两个经常用来实现定时器的类。这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求。 Timer是一种定时器工具,用来在一...
通过java的TimerTask与Timer设计时间监控,写了一个测试类,帮助新人学习。
Java计时器Timer和TimerTask用法总结
java类Timer和TimerTask的使用.doc
JavaTimer和TimerTask实例教程Java开发Java经验技巧共3页.pdf.zip
java类Timer和TimerTask的使用.pdf
本文档主要讲述的是Java中的Timer和TimerTask的使用;Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类。希望本文档会给有需要...
Android Timer TimerTask Handler 三者结合实现 数据更新与View更新的同步。 一个不错的机制。
在控件上动态显示内容,这里使用的是TextView,其他控件可以使用相同的方法。
NULL 博文链接:https://chenhua-1984.iteye.com/blog/374683
本篇文章主要介绍了解析Java中的Timer和TimerTask在Android中的用法,主要介绍了Timer和TimerTask的用法,有需要的可以了解一下。
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1199750
Timer与TimerTask编写的定时器(在spring+struts2+mybatis框架下)
1.实现Push推送demo,用AlarmManager实现全局定时和Timer、TimerTask两种方式分别实现定时服务状态栏Notification消息提醒! 2.该功能经过测试,只需要从服务上定时获取到提醒消息即可,稍做修改,即可使用。 3.可以...
主要介绍了JAVA Timer和TimerTask的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下