Core Java Tutorial -- Timer Thread
2018-04-01 07:24
246 查看
Java
Java Timer 类使用 Object wait 和 notify 方法来调度任务。
注意,一个线程执行需要 20 秒,但 Java Timer 对象计划每 10s 运行一次任务。这是输出:
输出确认如果一个任务已经执行,Timer将等待它完成,一旦完成,它将再次从队列中开始下一个任务。
可以创建 Java Timer 对象来将相关任务作为守护程序线程运行。定时器 cancel() 方法用于终止定时器并放弃所有计划任务,但它不会干扰当前正在执行的任务并让其完成。如果定时器作为守护进程线程运行,那么无论我们是否取消它,它将在所有用户线程完成执行后立即终止。
Timer 类包含多个 schedule() 方法,用于安排任务在给定日期或延迟一段时间后运行一次有几个scheduleAtFi
4000
xedRate() 方法以一定的时间间隔周期性地运行任务。
在使用Timer调度任务时,应确保时间间隔比正常线程执行时间要长,否则任务队列大小将保持增长,最终任务将始终执行。
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() 方法,用于安排任务在给定日期或延迟一段时间后运行一次有几个scheduleAtFi
4000
xedRate() 方法以一定的时间间隔周期性地运行任务。
在使用Timer调度任务时,应确保时间间隔比正常线程执行时间要长,否则任务队列大小将保持增长,最终任务将始终执行。
相关文章推荐
- Core Java Tutorial -- TreeMap
- Core Java Tutorial -- Iterator
- Core Java Tutorial -- SortedMap
- Core Java Tutorial -- HashSet
- Core Java Tutorial -- HashMap
- Core Java Tutorial -- Map
- Core Java Tutorial -- Threads in Java
- Core Java Tutorial -- Thread Join
- Core Java Tutorial -- List
- Core Java Tutorial -- ArrayList
- Core Java Tutorial -- Thread Safety in Singleton Class
- Core Java Tutorial -- Daemon Thread
- Core Java Tutorial -- Thread Local
- Core Java Tutorial -- Thread Life Cycle
- Core Java Tutorial -- Thread Pool
- Core Java Tutorial -- Stack
- Core Java Tutorial -- Thread Safety and Java Synchronization
- Core Java Tutorial -- Thread wait, notify and notifyAll
- Core Java Tutorial -- Thread.sleep()
- Core Java Tutorial -- Queue