欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【java】定时器

发布时间:2025/6/17 编程问答 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【java】定时器 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

总结

1、执行计划的任务放在TimerTask的子类中,由Timer进行该任务。

2、创建一个Timer就是启动一个新的线程,直至Timer里的任务执行完毕,才会结束。希望创建的线程为守护线程,则创建时需设置Timer timer=new Timer(true);

3、执行任务的时间早于当前时间,任务会立即执行。

4、TimerTask是以队列的方式一个个顺序执行的。当前面的任务消耗时间较长,则后面的任务运行的时间也会延后。

比如,假定Task1执行需2s,Task2在Task1开始之后1s需被执行。结果是执行完Task1后,立即执行Task2。(实际也符合第3点)

5、如果没有延迟,则执行任务的时间是上一次任务开始的时间加上poried的时间。如果延迟了,则执行任务的时间为上一个任务的结束时间。(补充第4条)

6、方法schedule和scheduleAtFixedRate的区别在于后者有追赶执行性。(下面由代码解释)

7、异常方面。如果timer中执行任务时发生异常,则结束该timer线程,不会在执行任何任务。

 

常用例子

1、示例

import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /*** Created by zay on 2016/12/8.*/public class TimerTest {public static void main(String[] args) {System.out.println("当前时间:"+new Date());//执行计划的任务放在TimerTask的子类中,由Timer进行该任务。Timer timer = new Timer();//创建一个任务,1s后开始执行,并此后每隔2s执行。timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println(new Date() + "任务一");}},1000,2000);//创建一个任务,十天后执行。Calendar calendar = Calendar.getInstance();calendar.add(Calendar.DATE,1);Date runDate = calendar.getTime();timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println(new Date() + "任务二");}},runDate);//timer.cancel(); 调用TImer的cancel()方法会清空该TImer的所有任务。//timerTask.cancel(); 调用TImerTask的cancel()方法则会在TImer中取消该任务。 } }

 2、方法schedule和scheduleAtFixedRate的区别在于后者有追赶执行性。

import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask;/*** Created by zay on 2016/12/8.*/ public class TimerTest {public static void main(String[] args) {System.out.println("当前时间:"+new Date());Calendar calendar=Calendar.getInstance();calendar.add(Calendar.SECOND,-100); //设置一个比较早的时间Date earlyDate = calendar.getTime();Timer timer = new Timer();System.out.printf(new Date() + " 现在开始执行任务");timer.scheduleAtFixedRate(new TimerTask() {@Overridepublic void run() {System.out.println(new Date() + " 任务一");}},earlyDate,5000);/*timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println(new Date() + " 任务一");}},earlyDate,5000);*/} }

 

// schedule方法的输出(注意比对执行任务的时间)                //scheduleAtFixedRate方法的输出

     

解释:当执行任务的时间早于当前时间时,比如示例中,执行任务的时间早于当前任务100s,那么这段时间理论应该有的任务怎么处理呢?

schedule选择抛弃不理,以当前的时间为新的起点,而scheduleAtFiexdRate则会一口气将这些任务顺序都执行完毕。

 

转载于:https://www.cnblogs.com/zadomn0920/p/java.html

总结

以上是生活随笔为你收集整理的【java】定时器的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。