java Timer类
java.util
类 Timer
java.lang.Object
java.util.Timer
public class Timerextends Object
一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。
对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。默认情况下,任务执行线程并不作为守护线程 来运行,所以它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的 cancel 方法。
如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。
此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。
此类不 提供实时保证:它使用 Object.wait(long) 方法来安排任务。
实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。
实现注意事项:所有构造方法都启动计时器线程。
- 从以下版本开始:
- 1.3
- 另请参见:
TimerTask,Object.wait(long)
| 构造方法摘要 | |
|---|---|
Timer() 创建一个新计时器。 |
|
Timer(boolean isDaemon)创建一个新计时器,可以指定其相关的线程作为守护程序运行。 |
|
Timer(String name)创建一个新计时器,其相关的线程具有指定的名称。 |
|
Timer(String name,创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。 |
|
| 方法摘要 | |
|---|---|
void |
cancel()终止此计时器,丢弃所有当前已安排的任务。 |
int |
purge()从此计时器的任务队列中移除所有已取消的任务。 |
void |
schedule(TimerTask task,安排在指定的时间执行指定的任务。 |
void |
schedule(TimerTask task, 安排指定的任务在指定的时间开始进行重复的固定延迟执行。 |
void |
schedule(TimerTask task, 安排在指定延迟后执行指定的任务。 |
void |
schedule(TimerTask task,安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。 |
void |
scheduleAtFixedRate(TimerTask task, 安排指定的任务在指定的时间开始进行重复的固定速率执行。 |
void |
scheduleAtFixedRate(TimerTask task,安排指定的任务在指定的延迟后开始进行重复的固定速率执行。 |
| 从类 java.lang.Object 继承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 构造方法详细信息 |
|---|
Timer
public Timer()
Timer
public Timer(boolean isDaemon)
- 创建一个新计时器,可以指定其相关的线程作为守护程序运行。如果计时器将用于安排重复的“维护活动”,则调用守护线程,在应用程序运行期间必须调用守护线程,但是该操作不应延长程序的生命周期。
Timer
public Timer(String name)
- 创建一个新计时器,其相关的线程具有指定的名称。相关的线程不 作为守护程序运行。
- 参数:
name- 相关线程的名称。- 抛出:
NullPointerException- 如果 name 为 null。- 从以下版本开始:
- 1.5
- 另请参见:
Thread.getName(),Thread.isDaemon()
Timer
public Timer(String name,
boolean isDaemon)
- 创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。
- 参数:
name- 相关线程的名称。isDaemon- 如果应该将相关的线程作为守护程序运行,则为 true。- 抛出:
NullPointerException- 如果 name 为 null。- 从以下版本开始:
- 1.5
- 另请参见:
Thread.getName(),Thread.isDaemon()
| 方法详细信息 |
|---|
schedule
public void schedule(TimerTask task,
long delay)
- 安排在指定延迟后执行指定的任务。
-
- 参数:
task- 所要安排的任务。delay- 执行任务前的延迟时间,单位是毫秒。- 抛出:
IllegalArgumentException- 如果 delay 是负数,或者 delay + System.currentTimeMillis() 是负数。IllegalStateException- 如果已经安排或取消了任务,或者已经取消计时器。
schedule
public void schedule(TimerTask task,
Date time)
- 安排在指定的时间执行指定的任务。如果此时间已过去,则安排立即执行该任务。
-
- 参数:
task- 所要安排的任务。time- 执行任务的时间。- 抛出:
IllegalArgumentException- 如果 time.getTime() 是负数。IllegalStateException- 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。
schedule
public void schedule(TimerTask task,
long delay,
long period)
- 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。从长期来看,执行的频率一般要稍慢于指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
固定延迟执行适用于那些需要“平稳”运行的重复活动。换句话说,它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。
-
- 参数:
task- 所要安排的任务。delay- 执行任务前的延迟时间,单位是毫秒。period- 执行各后续任务之间的时间间隔,单位是毫秒。- 抛出:
IllegalArgumentException- 如果 delay 是负数,或者 delay + System.currentTimeMillis() 是负数。IllegalStateException- 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。
schedule
public void schedule(TimerTask task,
Date firstTime,
long period)
- 安排指定的任务在指定的时间开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。在长期运行中,执行的频率一般要稍慢于指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
固定延迟执行适用于那些需要“平稳”运行的重复执行活动。换句话说,它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。
-
- 参数:
task- 所要安排的任务。firstTime- 首次执行任务的时间。period- 执行各后续任务之间的时间间隔,单位是毫秒。- 抛出:
IllegalArgumentException- 如果 time.getTime() 是负数。IllegalStateException- 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。
scheduleAtFixedRate
public void scheduleAtFixedRate(TimerTask task,
long delay,
long period)
- 安排指定的任务在指定的延迟后开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
在固定速率执行中,根据已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”。从长远来看,执行的频率将正好是指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
固定速率执行适用于那些对绝对 时间敏感的重复执行活动,如每小时准点打钟报时,或者在每天的特定时间运行已安排的维护活动。它还适用于那些完成固定次数执行的总计时间很重要的重复活动,如倒计时的计时器,每秒钟滴答一次,共 10 秒钟。最后,固定速率执行适用于安排多个重复执行的计时器任务,这些任务相互之间必须保持同步。
-
- 参数:
task- 所要安排的任务。delay- 执行任务前的延迟时间,单位是毫秒。period- 执行各后续任务之间的时间间隔,单位是毫秒。- 抛出:
IllegalArgumentException- 如果 delay 是负数,或者 delay + System.currentTimeMillis() 是负数。IllegalStateException- 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。
scheduleAtFixedRate
public void scheduleAtFixedRate(TimerTask task,
Date firstTime,
long period)
- 安排指定的任务在指定的时间开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
在固定速率执行中,相对于已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多次执行,从而使后续执行能够赶上来。从长远来看,执行的频率将正好是指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。
固定速率执行适用于那些对绝对 时间敏感的重复执行活动,如每小时准点打钟报时,或者在每天的特定时间运行已安排的维护活动。它还适用于那些完成固定次数执行的总计时间很重要的重复活动,如倒计时的计时器,每秒钟滴答一次,共 10 秒钟。最后,固定速率执行适用于安排多次重复执行的计时器任务,这些任务相互之间必须保持同步。
-
- 参数:
task- 所要安排的任务。firstTime- 首次执行任务的时间。period- 执行各后续任务之间的时间间隔,单位是毫秒。- 抛出:
IllegalArgumentException- 如果 time.getTime() 是负数。IllegalStateException- 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。
cancel
public void cancel()
- 终止此计时器,丢弃所有当前已安排的任务。这不会干扰当前正在执行的任务(如果存在)。一旦终止了计时器,那么它的执行线程也会终止,并且无法根据它安排更多的任务。
注意,在此计时器调用的计时器任务的 run 方法内调用此方法,就可以绝对确保正在执行的任务是此计时器所执行的最后一个任务。
可以重复调用此方法;但是第二次和后续调用无效。
-
purge
public int purge()
- 从此计时器的任务队列中移除所有已取消的任务。调用此方法对计时器的行为没有影响,但是将无法引用队列中已取消的任务。如果没有对这些任务的外部引用,则它们就成为垃圾回收的合格对象。
多数程序无需调用此方法。它设计用于一些罕见的应用程序,这些程序可取消大量的任务。调用此方法要以时间来换取空间:此方法的运行时可能与 n + c log n 呈正比,其中 n 是队列中的任务数,而 c 是取消的任务数。
注意,从此计时器上所安排的任务中调用此方法是允许的。
-
- 返回:
- 从队列中移除的任务数。
- 从以下版本开始:
- 1.5
java Timer类的更多相关文章
- Java:利用java Timer类实现定时执行任务的功能
一.概述 在java中实现定时执行任务的功能,主要用到两个类,Timer和TimerTask类.其中Timer是用来在一个后台线程按指定的计划来执行指定的任务.TimerTask一个抽象类,它的子类代 ...
- Java定时任务:利用java Timer类实现定时执行任务的功能
一.概述 在java中实现定时执行任务的功能,主要用到两个类,Timer和TimerTask类.其中Timer是用来在一个后台线程按指定的计划来执行指定的任务. TimerTask一个抽象类,它的子类 ...
- 什么是 Java Timer 类?如何创建一个有特定时间间隔的任务?
java.util.Timer 是一个工具类,可以用于安排一个线程在未来的某个特定时间执 行.Timer 类可以用安排一次性任务或者周期任务. java.util.TimerTask 是一个实现了 R ...
- [ImportNew]Java中的Timer类和TimerTask类
http://www.importnew.com/9978.html java.util.Timer是一个实用工具类,该类用来调度一个线程,使它可以在将来某一时刻执行. Java的Timer类可以调度 ...
- java Timer定时器管理类
1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...
- 两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz
1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 import java.util.TimerTask; public class EmailReportT ...
- 【外文翻译】使用Timer类去调度任务 ——java
使用Timer类去调度任务 --java 原文地址:https://dzone.com/articles/using-timer-class-to-schedule-tasks 原文作者:Jay Sr ...
- java swing中Timer类的学习
最近在完成学校课程的java平时作业,要实现一个计时器,包含开始.暂停以及重置三个功能.由于老师规定要用这个timer类,也就去学习了一下,顺便记录一下. 首先呢去查了一下java手册上的东西,发现t ...
- Java学习笔记 -- Java定时调度工具Timer类
1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...
随机推荐
- ED/EP系列1《简介》
电子存折(ED:ElectronicDeposit)一种为持卡人进行消费.取现等交易而设计的支持个人识别码(PIN)保护的金融IC卡应用.它支持圈存.圈提.消费和取现等交易. 电子钱包(EP:Elec ...
- SQLite数据库与Contentprovider(2)
ContentProvider: 在创建ContentProvider时,需要首先使用数据库.文件系统或网络实现底层存储功能, 然后在继承ContentProvider的类中实现基本数据操作的接口函数 ...
- with check option
通过有with check option选项的视图操作基表(只是面对单表,对连接多表的视图正在寻找答案),有以下结论:首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过 ...
- Jsp实现form的file和text传递(multipart/form-data)
Jsp实现form的file和text传递(multipart/form-data) 首先是form部分,因为要有<input type="file" />的类型,所以 ...
- arm-elf-gcc交叉编译器的使用教程
arm-elf-gcc交叉编译器的使用教程 一开始需要安装arm-elf-gcc,但是这是一个32位的程序,我是安装了64位的系统,据说安装ia32.libs依赖库能运行这个,但是看到博客上面前人安装 ...
- objective-c自学总结(一)---面向对象
本人大二本科在读,利用一个月多一点的时间对OC语言基础进行了自学,在下一阶段UI学习开始之前, 对这一阶段的自学进行一些总结.在此特别感谢刘晓斌学长和无线互联3G学院 首先说一下对OC的整体感觉,这是 ...
- android数独游戏
最近没事干,照着视频教程写了一个数独游戏,很粗糙还有很多要修改的地方.下面就来说说这个游戏吧 1.自定义一个View控件,用来在屏幕上显示一个9*9的格子,其实就是横着画8条线,竖着画8跳线,然后将其 ...
- 如何在Oracle网站获取官方免费课程
1.登陆Oracle Support,输入Article ID:740966.1,点击进行查找: 2.找到下图所示的文章,Article ID为:740964.1 3.点击第二个图中所示的Here处, ...
- 团队项目——NABC
N:根据自身遇到的问题,应对铁大环境——查询图书时只能登录网页进行查询,对于我们铁大莘莘学子着实是不方便的.所以此项目诞生. A:对于实现方法,首先我们随移动设备的潮流,做一个Android应用,对于 ...
- mongo的insert和save比较
insert仅仅是插入文档到集合中,如果记录不存在则插入,如果记录存在则忽略 save是在文档不存在时插入,存在时则是更新 下面代码不是为了演示insert和save的: foreach ($mens ...