`

使用定时器

阅读更多
TimerTask是一个抽象类,具体需要由子类来实现他的run()方法

它的方法如下:
protected  TimerTask()
          创建一个新的计时器任务。
  方法摘要
boolean cancel()
          取消此计时器任务。
abstract  void run()
          此计时器任务要执行的操作。
long scheduledExecutionTime()
          返回此任务最近实际 执行的安排 执行时间。

但是要执行TimerTask子类的run()方法需要Timer来的schedule方法来执行
Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。

与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述令人讨厌的任务最终完成时才能够被快速连续地执行。

对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。默认情况下,任务执行线程并不作为守护线程 来运行,所以它能够阻止应用程序终止。如果调用方想要快速终止计时器的任务执行线程,那么调用方应该调用计时器的 cancel 方法。

如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。

此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。

此类不 提供实时保证:它使用 Object.wait(long) 方法来安排任务。

实现注意事项:此类可扩展到大量同时安排的任务(存在数千个都没有问题)。在内部,它使用二进制堆来表示其任务队列,所以安排任务的开销是 O(log n),其中 n 是同时安排的任务数。

构造方法摘要
Timer()
          创建一个新计时器。
Timer(boolean isDaemon)
          创建一个新计时器,可以指定其相关的线程作为守护程序运行。
Timer(String name)
          创建一个新计时器,其相关的线程具有指定的名称。
Timer(String name, boolean isDaemon)
          创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。


具体方法如下:
void cancel()
          终止此计时器,丢弃所有当前已安排的任务。
int purge()
          从此计时器的任务队列中移除所有已取消的任务。
void schedule(TimerTask task, Date time)
          安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
          安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schedule(TimerTask task, long delay)
          安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period)
          安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
          安排指定的任务在指定的时间开始进行重复的固定速率执行。
void scheduleAtFixedRate(TimerTask task, long delay, long period)
          安排指定的任务在指定的延迟后开始进行重复的固定速率执行。

具体示例:

package thread;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TestTimerTask extends TimerTask {

public void run(){
System.out.println(new Date());
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Timer time=new Timer();
TestTimerTask task=new TestTimerTask();
time.schedule(task, 4000,1000);

}

}



执行结果:

Sat Apr 24 14:33:20 CST 2010
Sat Apr 24 14:33:21 CST 2010
Sat Apr 24 14:33:22 CST 2010
Sat Apr 24 14:33:23 CST 2010
Sat Apr 24 14:33:24 CST 2010
......
分享到:
评论

相关推荐

    vc++实现非窗口类中使用定时器的方法

    ### vc++ 实现非窗口类中使用定时器的方法 在探讨如何在非窗口类中使用定时器之前,我们首先需要了解几个关键的概念:定时器、非窗口类以及它们与消息映射之间的关系。 #### 一、定时器简介 在Windows编程中,...

    STM32F103使用定时器触发ADC采集

    总的来说,STM32F103使用定时器触发ADC采集是一种常见的实践,它能够实现精确的定时和连续的数据采集,适用于各种需要实时处理模拟信号的场合。通过理解定时器和ADC的工作原理,以及熟练使用LL库,开发者可以有效地...

    TIA博途使用定时器和计数器指令时如何减少背景DB的使用?.docx

    以下是一些建议和步骤,帮助你在使用定时器和计数器指令时减少背景DB的使用。 1. 数据块规划: 在创建项目之初,可以预先规划一个综合性的数据块,比如DB1,用于存储所有的定时器和计数器变量。在本例中,我们创建...

    VC 实现非窗口类中使用定时器的方法

    在VC++编程环境中,有时我们需要在非窗口类中使用定时器功能,以便在特定时间间隔执行某些任务。本文将详细讲解如何实现这一需求,并通过一个实际的示例——"TimerDemo"来阐述其中的关键知识点。 首先,让我们了解...

    VC++使用定时器的例子【源码】

    本示例提供了VC++使用定时器的一个基本源码实例,虽然只是一个功能模块,但可以帮助理解定时器的基本原理和使用方法。 首先,我们要了解定时器的工作原理。在Windows操作系统中,定时器是通过消息机制来实现的。当...

    Visual C++在非窗口类中使用定时器

    VC++在非窗口类中使用定时器timer

    CC2530查询方式使用定时器

    在提供的压缩包"6、CC2530 查询方式使用定时器"中,应包含相关的源代码示例,这些示例可以帮助读者更直观地理解上述理论知识,并实际操作进行学习。务必仔细阅读代码注释,理解每个部分的功能,以便更好地掌握CC2530...

    22、如何在应用程序中使用定时器?(Visual C++编程 源代码)

    22、如何在应用程序中使用定时器?(Visual C++编程 源代码)22、如何在应用程序中使用定时器?(Visual C++编程 源代码)22、如何在应用程序中使用定时器?(Visual C++编程 源代码)22、如何在应用程序中使用...

    VS2010在Win32控制台使用定时器实例

    基本网上很多定时器都是用MFC写的,而用win32方面比较少,项目用到定时器这块,所以顺便上传一份. 是在VS2010 --> VC++ --> Win32控制台建的工程.里面涉及线程/定时器,简单易用,下载完可直接运行.

    使用定时器0以方式1产生周期为20ms的等宽正方波连续脉冲,并由P1.2输出,以查询方式完成。

    使用定时器0以方式1产生周期为20ms的等宽正方波连续脉冲,并由P1.2输出,以查询方式完成。

    使用定时器(MFC)示例代码 C++

    在这个"使用定时器(MFC)示例代码 C++"中,我们将探讨如何在MFC应用中创建和管理定时器。 首先,要在MFC应用中添加定时器,我们需要在适当的地方设置定时器。这通常在窗口类的成员函数中完成,比如`OnCreate`或`...

    S7-200SMART中定时器的使用方法和常见注意事项汇总.docx

    了解并掌握这些使用方法和注意事项,有助于在S7-200SMART系统中有效地使用定时器,实现精准的定时控制功能。在编写程序时,确保对定时器的调用、预设值设置和分辨率选择都符合实际需求,同时注意子程序调用的时序,...

    在 STEP 7 WIN 里怎样优化使用定时器

    ### 在STEP 7 WIN 里怎样优化使用定时器 #### 定时器的基本概念与分类 在STEP 7 Micro/WIN软件中,定时器是一种重要的编程元件,它被广泛应用于控制逻辑中,用来实现时间相关的控制功能。定时器可以根据其工作原理...

    STM32F103使用定时器的捕获方式测量车速

    使用STM32F103的定时器2的第3个输入脚的捕获方式实现了车辆速度的测量。避免了一般的捕获方式慢速不能捕获的缺点。注释、代码齐全直接可以使用。希望对初学者有用。

    VC++中使用定时器的方法

    VC++中使用定时器的方法,VC++中使用定时器的方法,VC++中使用定时器的方法

    QT在子线程中调用定时器

    本篇文章将深入探讨如何在QT的子线程中正确使用定时器。 首先,我们需要了解QT中的线程模型。QT支持多线程编程,主要通过`QThread`类来实现。`QThread`提供了一个用户友好的接口,可以方便地创建和管理线程。当我们...

    VC 自定义定时器的使用

    在VC++编程环境中,自定义定时器是一种常见且重要的...正确理解和使用定时器能够帮助开发者实现复杂的定时任务,提高程序的响应性和实时性。在实际开发中,应充分考虑性能、精度以及资源管理,以确保程序的稳定和高效。

    Qt中在子线程中调用定时器

    本主题聚焦于如何在Qt的子线程中使用定时器,并通过信号和槽机制进行线程间通信。让我们深入探讨这个过程。 首先,我们要明白Qt的事件循环和线程的关系。每个线程都有自己的事件循环,而定时器(QTimer)是基于事件...

    NUC1xx中如何使用定时器.pdf

    为了使用定时器,我们需要进行编程,其编程流程大致如下: 1. 配置时钟源:通过设置CLKSEL1寄存器中的TMRx_S位和APBCLK寄存器中的TMRx_EN位来配置和启用定时器。 2. 设置工作模式:通过配置定时器控制及状态寄存器...

    AVR—使用定时器必须弄清的几个概念!

    在AVR单片机中使用定时器时,需要掌握几个核心概念,以便正确和高效地进行定时器编程。AVR单片机包含多个定时器模块,其中在Mega16型号中,包含T/C0、T/C1和T/C2三个独立的定时器模块。T/C0和T/C2是8位定时器,而T/...

Global site tag (gtag.js) - Google Analytics