`
zhbwww
  • 浏览: 37689 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA TIMER用法学习

    博客分类:
  • java
阅读更多
JAVA TIMER用法学习
引用http://www.blogjava.net/madshime/archive/2009/05/13/270317.html
     Timer类是用来执行任务的类,它接受一个TimerTask做参数
     Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率.看个简单的例子:
import java.io.IOException;
import java.util.Timer;

public class TimerTest {     
    public static void main(String[] args){
        Timer timer = new Timer();
        timer.schedule(new MyTask(), 1000, 2000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
        while(true){//这个是用来停止此任务的,否则就一直循环执行此任务了
            try {
                int ch = System.in.read();
                if(ch-'c'==0){
                    timer.cancel();//使用这个方法退出任务
                   
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  
    static class MyTask extends java.util.TimerTask{
        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println("________");
        }
    }
}

    如果你使用的是JDK 5+,还有一个scheduleAtFixedRate模式可以用,在这个模式下,Timer会尽量的让任务在一个固定的频率下运行,举例说明:在上面的例子中,我们想让MyTask在1秒钟后,每两秒钟执行一次,但是因为java不是实时的(其实java实时性很差.....),所以,我们在上个程序中表达的原义并不能够严格执行.如果我们调用的是scheduleAtFixedRate,那么,Timer会尽量让你的Task执行的频率保持在2秒一次.运行上面的程序,假设使用的是scheduleAtFixedRate,那么下面的场景就是可能的:1秒钟后,MyTask 执行一次,因为系统繁忙,之后的2.5秒后MyTask 才得以执行第二次,然后,Timer记下了这个延迟,并尝试在下一个任务的时候弥补这个延迟,那么,1.5秒后,MyTask 将执行的三次."以固定的频率而不是固定的延迟时间去执行一个任务"

下面给出一个复杂点的例子,其中告诉大家怎么退出单个TimerTask,怎么退出所有Task

package MyTimerTest;

import java.io.IOException;
import java.util.Timer;

/* JavaScript之家http://www.jorse.cn
* 本类给出了使用Timer和TimerTaske的主要方法,其中包括定制任务,添加任务
* 退出任务,退出定时器.
* 因为TimerTask的status域是包级可访问的,所以没有办法在java.util.包外
* 得到其状态,这对编程造成一些不便 .我们不能判断某个Task的状态了.
*
*/

public class TimerTest {

    public static void main(String[] args) {
        Timer timer = new Timer();
        MyTask myTask1 = new MyTask();
        MyTask myTask2 = new MyTask();
        myTask2.setInfo("myTask-2");
        timer.schedule(myTask1, 1000, 2000);
        timer.scheduleAtFixedRate(myTask2, 2000, 3000);
        while (true) {
            try {
                byte[] info = new byte[1024];
                int len = System.in.read(info);
                String strInfo = new String(info, 0, len, "GBK");//从控制台读出信息
                if (strInfo.charAt(strInfo.length() - 1) == ' ') {
                    strInfo = strInfo.substring(0, strInfo.length() - 2);
                }
                if (strInfo.startsWith("Cancel-1")) {                     myTask1.cancel();//退出单个任务
                    // 其实应该在这里判断myTask2是否也退出了,是的话就应该break.但是因为无法在包外得到
                    // myTask2的状态,所以,这里不能做出是否退出循环的判断.
                } else if (strInfo.startsWith("Cancel-2")) {
                    myTask2.cancel();
                } else if (strInfo.startsWith("Cancel-All")) {
                    timer.cancel();//退出Timer
                    break;
                } else {
                    // 只对myTask1作出判断,偷个懒^_^
                    myTask1.setInfo(strInfo);
                }
            } catch (IOException e) {                 // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    static class MyTask extends java.util.TimerTask {
        String info = "^_^";

        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println(info);
        }

        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }

    }

}
来源:JavaScript之家http://www.jorse.cn
分享到:
评论

相关推荐

    java中timer用法

    不过,标准的调度类 Timer 和 TimerTask 没有足够的灵活性,无法支持通常需要的计划任务类型。在本文中,Java 开发人员 Tom White 向您展示了如何构建一个简单通用的计划框架,以用于执行任意复杂的计划任务。

    Java语言中Timer类的简洁用法.doc

    在《Java语言中Timer类的简洁用法》文档中,作者Tom White提出了一个增强的计划框架,旨在提供更大的灵活性,以应对各种复杂的定时任务需求。这个框架由两个类和一个接口组成,易于理解和使用,适合已经熟悉Java...

    java定时器(timer类使用详解)

    Java定时器,也被称为`Timer`类,是Java标准库中的一个强大工具,它允许开发者在指定的时间间隔执行任务,从而实现定时操作。这个类在`java.util`包中定义,是实现定时任务调度的核心。在本文中,我们将深入探讨`...

    java5定时器java Timer

    Java5中的`java.util.Timer`类是一个非常实用的工具,用于调度周期性的任务执行。它在多线程环境中提供了一种高效且灵活的方式来安排任务在未来某个时间点...分析这些代码,可以帮助你更好地理解和掌握`Timer`的用法。

    JAVA TIMER简单用法学习

    Java Timer 类是一个调度工具,用于计划将来在后台线程中执行的任务。它的主要用途是在给定的时间点或按特定的时间间隔执行任务。Timer 接受一个 TimerTask 的实例作为参数,TimerTask 是一个抽象类,需要子类化并...

    Java计时器Timer和TimerTask用法总结

    Java 计时器 Timer 和 TimerTask 用法总结 Java 中的计时器(Timer)和 TimerTask 是一种常用的延迟执行技术,用于实现延迟执行某个任务或事件。下面将详细介绍 Timer 和 TimerTask 的用法和实现原理。 Timer ...

    定时器Timer用法及其源码

    在Java编程语言中,`Timer`类是Java.util包下的一个关键组件,它提供了一种在后台线程中定期执行任务的能力。这个类主要用于计划将来某一时点执行的任务,或者定期重复执行的任务。本篇文章将深入探讨`Timer`类的...

    Java中Timer的schedule()方法参数详解

    Java中Timer的schedule()方法参数详解 Java中Timer的schedule()方法是Java中的一个定时任务机制,允许开发者在特定的时间点或时间间隔执行特定的任务。schedule()方法是Timer类中的一个方法,用于安排一个任务的...

    Java中Timer的用法详解

    在Java中,`Timer` 类是Java.util包的一部分,它提供了一种方便的方式来按计划执行任务,这些任务通常称为`TimerTask`。`Timer` 类主要用于创建一个后台线程,该线程负责调度和执行由`TimerTask`对象定义的任务。`...

    Java定时器Timer简述共8页.pdf.zip

    本文将深入探讨Java Timer类以及与其相关的TimerTask类,讲解它们的工作原理和常见用法。 1. **Java Timer类介绍** - Java Timer类是位于java.util包下的,它提供了创建和管理定时任务的能力。通过创建一个Timer...

    Java语言中Timer类的简洁用法

    在Java编程中,`Timer`类和`TimerTask`类是用于实现定时任务和计划任务的核心组件。它们属于`java.util`包,为开发者提供了在特定时间间隔执行任务的能力。然而,标准的`Timer`类和`TimerTask`类在某些复杂场景下...

    JAVA定时器之Timer+TimerTask

    以上就是`JAVA`中的`Timer`和`TimerTask`的基本用法和注意事项。通过合理利用这两个类,开发者可以构建出灵活的定时执行逻辑,适应各种复杂的场景需求。在实际项目中,尤其是在服务器端编程、后台任务调度等场合,`...

    详解JAVA Timer和TimerTask

    下面将详细介绍JAVA Timer和TimerTask的概念、用法和优点。 JAVA Timer JAVA Timer是一种线程设施,用于安排以后在后台线程中执行的任务。它可以安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以...

    Java中Timer的用法

    下面我们将深入探讨 `Timer` 和 `TimerTask` 的用法、工作原理以及相关的注意事项。 首先,`Timer` 类是一个线程安全的类,它负责创建和管理一个后台线程,该线程被称为 `Timer` 线程。`Timer` 的主要职责是安排 `...

    简单的timer例子

    总之,这个简单的timer例子是学习Java定时任务调度的一个良好起点。通过掌握`Timer`和`TimerTask`,你可以为应用程序添加延时功能或者定期执行的任务,这对于许多实际场景,如数据同步、定时提醒等都是非常有用的。...

    Python定时执行之Timer用法示例

    `Timer`类提供了类似Java中的`Timer`功能,让我们能够设定一个延时后执行的任务。 首先,`Timer`类是`threading`模块的一部分,它基于Python的线程机制,可以在指定的时间间隔后启动一个新线程来执行指定的函数。...

    Timer定时器的使用方法

    在Java编程语言中,`java.util.Timer` 和 `java.util.TimerTask` 类是用于执行定期或延时任务的核心组件。它们允许开发者在指定的时间间隔内执行特定的操作,这对于实现定时任务,如定时备份、轮询服务或者执行周期...

Global site tag (gtag.js) - Google Analytics