Java Timer计时器任务

Java Timer计时器任务Java java util Timer 是一个实用程序类 可用于调度线程在将来的特定时间执行 Java Timer 类可用于调度任务一次性运行或定期运行 Java TimerTaskjav util

大家好,欢迎来到IT知识分享网。

Java java.util.Timer 是一个实用程序类,可用于调度线程在将来的特定时间执行。Java Timer 类可用于调度任务一次性运行或定期运行。

Java Timer计时器任务

Java TimerTask

java.util.TimerTask 是一个实现 Runnable 接口的抽象类,我们需要扩展这个类来创建我们自己的 TimerTask,可以使用 java Timer 类进行调度。

Java Timer 类是线程安全的,多个线程可以共享一个 Timer 对象,而无需外部同步。Timer 类使用 java.util.TaskQueue 以给定的固定间隔添加任务,并且在任何时候都只能有一个线程运行 TimerTask,例如,如果您正在创建一个每 10 秒运行一次的计时器,但单个线程执行需要 20 秒,那么 Timer 对象将继续向队列添加任务,一旦一个线程完成, 它将通知队列,另一个线程将开始执行。Java Timer 类使用对象等待和通知方法来调度任务。下面是Java Timer and TimerTask示例的简单程序。

package com.journaldev.threads; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { @Override public void run() { System.out.println("Timer task started at:"+new Date()); completeTask(); System.out.println("Timer task finished at:"+new Date()); } private void completeTask() { try { //assuming it takes 20 secs to complete the task Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String args[]){ TimerTask timerTask = new MyTimerTask(); //running timer task as daemon thread Timer timer = new Timer(true); timer.scheduleAtFixedRate(timerTask, 0, 10*1000); System.out.println("TimerTask started"); //cancel after sometime try { Thread.sleep(); } catch (InterruptedException e) { e.printStackTrace(); } timer.cancel(); System.out.println("TimerTask cancelled"); try { Thread.sleep(30000); } catch (InterruptedException e) { e.printStackTrace(); } } }

请注意,一个线程执行将需要 20 秒,但 Java Timer 对象计划为每 10 秒运行一次任务。这是程序的输出:

TimerTask started Timer task started at:Wed Dec 26 19:16:39 PST 2012 Timer task finished at:Wed Dec 26 19:16:59 PST 2012 Timer task started at:Wed Dec 26 19:16:59 PST 2012 Timer task finished at:Wed Dec 26 19:17:19 PST 2012 Timer task started at:Wed Dec 26 19:17:19 PST 2012 Timer task finished at:Wed Dec 26 19:17:39 PST 2012 Timer task started at:Wed Dec 26 19:17:39 PST 2012 Timer task finished at:Wed Dec 26 19:17:59 PST 2012 Timer task started at:Wed Dec 26 19:17:59 PST 2012 Timer task finished at:Wed Dec 26 19:18:19 PST 2012 Timer task started at:Wed Dec 26 19:18:19 PST 2012 TimerTask cancelled Timer task finished at:Wed Dec 26 19:18:39 PST 2012

输出确认如果任务已经在执行,Timer 将等待它完成,一旦完成,它将再次启动队列中的下一个任务。可以创建 Java Timer 对象以将关联的任务作为守护程序线程运行。Timer cancel() 方法用于终止计时器并丢弃任何计划任务,但它不会干扰当前正在执行的任务并让它完成。如果计时器作为守护线程运行,无论我们是否取消它,一旦所有用户线程完成执行,它就会终止。Timer 类包含几个 schedule() 方法,用于调度任务在给定日期或延迟后运行一次。有几种 scheduleAtFixedRate() 方法可以按一定的时间间隔定期运行任务。使用 Timer 计划任务时,应确保时间间隔大于正常线程执行,否则任务队列大小将不断增长,最终任务将始终执行。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109446.html

(0)
上一篇 2026-02-06 16:16
下一篇 2026-02-06 16:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信