Core Java Tutorial -- Timer Thread 2022-05-28 07:20 89阅读 0赞 Java `java.util.Timer` 是一个使用程序类,可用于安排将来某个时间执行的线程。Java Timer 类可用于安排一次于运行的任务或定期运行的任务。 ## Java TimerTask ## `java.util.TimerTask` 是一个实现 Runnable 接口的静态类,我们需要去扩展这个类来创建我们自己的 使用 Timer 类进行调度的 TimerTask。 # Java Timer Example # Java Timer 类是线程安全的,多线程可以共享一个 Timer 对象,而无需外部同步。Timer 类使用 `java.util.TaskQueue` 按给定的时间间隔添加任务,并且任何时候都只能有一个线程于运行 TimerTask,栗如,如果要创建一个每 10 秒运行一次的定时器,单线程执行需要 20 秒,那么 Timer 对象将继续向队列中添加任务,一旦一个线程完成,它将通知队列,另一个线程将开始执行。 Java Timer 类使用 Object wait 和 notify 方法来调度任务。 package Thread; 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(120000); } catch (InterruptedException e) { e.printStackTrace(); } timer.cancel(); System.out.println("TimerTask cancelled"); try { Thread.sleep(30000); } catch (InterruptedException e) { e.printStackTrace(); } } } 注意,一个线程执行需要 20 秒,但 Java Timer 对象计划每 10s 运行一次任务。这是输出: TimerTask started Timer task started at:Sun Apr 01 07:21:52 CST 2018 Timer task finished at:Sun Apr 01 07:22:12 CST 2018 Timer task started at:Sun Apr 01 07:22:12 CST 2018 Timer task finished at:Sun Apr 01 07:22:32 CST 2018 Timer task started at:Sun Apr 01 07:22:32 CST 2018 Timer task finished at:Sun Apr 01 07:22:52 CST 2018 Timer task started at:Sun Apr 01 07:22:52 CST 2018 Timer task finished at:Sun Apr 01 07:23:12 CST 2018 Timer task started at:Sun Apr 01 07:23:12 CST 2018 Timer task finished at:Sun Apr 01 07:23:32 CST 2018 Timer task started at:Sun Apr 01 07:23:32 CST 2018 TimerTask cancelled Timer task finished at:Sun Apr 01 07:23:52 CST 2018 输出确认如果一个任务已经执行,Timer将等待它完成,一旦完成,它将再次从队列中开始下一个任务。 可以创建 Java Timer 对象来将相关任务作为守护程序线程运行。定时器 cancel() 方法用于终止定时器并放弃所有计划任务,但它不会干扰当前正在执行的任务并让其完成。如果定时器作为守护进程线程运行,那么无论我们是否取消它,它将在所有用户线程完成执行后立即终止。 Timer 类包含多个 schedule() 方法,用于安排任务在给定日期或延迟一段时间后运行一次有几个scheduleAtFixedRate() 方法以一定的时间间隔周期性地运行任务。 在使用Timer调度任务时,应确保时间间隔比正常线程执行时间要长,否则任务队列大小将保持增长,最终任务将始终执行。
相关 Core Java Tutorial -- Threads in Java Process(进程)和 Thread(线程)是执行的两个基本单元。并发编程更关心 Java 线程 0.1 Process 0.2 Thread 1 Java Thr 叁歲伎倆/ 2022年05月28日 03:49/ 0 赞/ 68 阅读
相关 Core Java Tutorial -- Thread Life Cycle 在使用线程和多线程环境编程时,了解线程生命周期和线程状态非常重要。 1. Thread Life Cycle in Java 1. New 电玩女神/ 2022年05月28日 04:45/ 0 赞/ 70 阅读
相关 Core Java Tutorial -- Thread.sleep() 1. Thread.sleep in Java 1. Java Thread Sleep Example 2. Java Thre 待我称王封你为后i/ 2022年05月28日 05:09/ 0 赞/ 81 阅读
相关 Core Java Tutorial -- Thread Join Java Thread join 方法可用于暂停当前线程执行,直到指定线程死亡。有三个重载 join 函数。 Java Thread join `public f 旧城等待,/ 2022年05月28日 06:14/ 0 赞/ 61 阅读
相关 Core Java Tutorial -- Thread Safety and Java Synchronization Java 中的线程安全是一个重要的主题。Java 提供多线程环境支持 Java 线程,我们知道多线程由同一个 Object 创建共享对象变量,并且当线程用于读取和更新共享数据, 太过爱你忘了你带给我的痛/ 2022年05月28日 06:25/ 0 赞/ 13 阅读
相关 Core Java Tutorial -- Exception in thread main 作为一个 Java 程序员,你必须已经见过有时运行 Java 程序的 main 线程中的异常。 1. Exception in thread main 左手的ㄟ右手/ 2022年05月28日 07:20/ 0 赞/ 71 阅读
相关 Core Java Tutorial -- Daemon Thread Java 中的守护线程可以用于在后台运行一些任务。当我们在 Java 中创建一个线程时,默认情况下它是一个用户线程,如果它正在运行,JVM 将不会终止程序。 Daemon 冷不防/ 2022年05月28日 07:20/ 0 赞/ 62 阅读
相关 Core Java Tutorial -- Thread Local Java ThreadLocal 被用于创建线程局部变量。我们知道一个对象的所有线程共享它的变量,所以这个变量不是线程安全的。我们可以为线程安全使用同步,但如果我们像避免同步, ╰半橙微兮°/ 2022年05月28日 07:20/ 0 赞/ 81 阅读
相关 Core Java Tutorial -- Timer Thread Java `java.util.Timer` 是一个使用程序类,可用于安排将来某个时间执行的线程。Java Timer 类可用于安排一次于运行的任务或定期运行的任务。 Ja ╰+攻爆jí腚メ/ 2022年05月28日 07:20/ 0 赞/ 90 阅读
相关 Core Java Tutorial -- Thread Pool Java 线程池管理工作线程池,它包含一个让任务等待执行的队列。我们可以使用 ThreadPoolExecutor 在 Java 中创建线程池。 Java 线程池管理 Run 淩亂°似流年/ 2022年05月28日 07:21/ 0 赞/ 23 阅读
还没有评论,来说两句吧...