`
hugang357
  • 浏览: 188390 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Timer与TimerTask实例

    博客分类:
  • java
阅读更多

今天看了一下Timer与TimerTask的用法并且在网上找了些相关的例子,
线程启动之后,定时调用run()方法,执行具体任务操作,可以重载TimerTask类的方法run(),自定义用户想要的操作。
例子一:
//这里只是简单的打印一下任务参数

public class myTask
      extends java.util.TimerTask {
    String jobName;
    private int i;
    public void run() { //run in interface Runnable
      System.out.println(jobName);
    }

    public myTask(String jobName) {
      this.jobName = jobName;
    }
}

//doTask.java

import java.util.*;
import java.io.*;

public class doTask {
    private java.util.Timer timer;
    private java.util.TimerTask task;
    public doTask(java.util.TimerTask task) {
      this.timer = new Timer();
      this.task = task;
    }
    public void start(int delay, int internal) {
      timer.schedule(task, delay * 1000, internal * 1000);//利用timer.schedule方法
    }

    public static void main(String[] args) {
      java.util.TimerTask task1 = new myTask("       Job 1");
      java.util.TimerTask task2= new myTask("Job 2");
      doTask pt = new doTask(task1);
      pt.start(1,3);
      doTask pt2 = new doTask(task2);
      pt2.start(1,1);
    }

}

这是在一定的间隔时间执行重复的任务,java.util.Timer可以很简单的帮你实现。当然你也可以用多线程来实现。下面是用java.util.Timer来实现这个功能。

例子二:
//文件TimerUse
package src;

import java.util.*;
import java.io.*;

public class TimerUse
{
public static void main(String[] args)
{
    PickTask pt = new PickTask();
    pt.start(1,3);
}
}
//文件PickTask
package src;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

public class PickTask
{
private Timer timer;

public PickTask(){
    timer = new Timer();
}

private TimerTask task = new TimerTask()
{
    public void run(){
   
     try{
      BufferedReader br = new BufferedReader(new FileReader("ming.txt"));
      String data = null;
      while((data=br.readLine())!=null){
       System.out.println(data);
      }
     }
     catch(FileNotFoundException e){
      System.out.println("can not find the file");
     }
     catch(IOException e){
      e.printStackTrace();
     }
    }
};

public void start(int delay,int internal )
{
    timer.schedule(task,delay*5000,internal*1000);
}
}

(1)方法选择。

一,使用高级的线程API,包括:
1.如果想重复的调用某个任务,或者想在一定延迟之后进行某项工作,推荐使用java.util.Timer和java.util.TimerTask组合;
2.如果想写一个GUI程序,推荐使用java.swing.Timer;
3.类SwingWorker用于后台线程。

二,继承java.lang.Thread类。

三,实现Runnabl接口。

(2)方法介绍。

1.使用java.util.Timer 和 java.util.TimerTask。

Timer类构造器有:
          Timer() ;    // 默认
          Timer( boolean isDaemon ) ;     // 是否是daemon线程
用法:
用一个类(MyTask)继承TimerTask,把要执行的任务放在该类的run方法中,然后创建一个Timer对象(新线程):
        Timer timer = new Timer();
并拟定计划:
        timer.schedule( new MyTask() ,    delayedTimeInMillisecond );      // 用于延迟一定时间后执行
        timer.schedule( new MyTask() ,    time );      // 用于在给定的时间点执行,time是Date类的一个实例
        timer.schedule( new MyTask(), initialDelay, interval )       // 用于重复执行
终止线程的方法:
  timer.cancel();
  当只剩下daemon线程时
  当MyTaskd的run()执行完时,去除所有对timer的引用
  System.exit(0);  // 所有的线程都终止

2.继承Thread类并覆盖run()方法

没什么好说的,但是要记得start()哦~
Thread的构造器有:
          Thread( threadName );
          Thread( runnableObject ,    threadName );

3.实现Runnable接口

方法就是实现一个Runnable的类,并把实例传给Thread类的构造器,以创建新的线程。如:
public class MyTask implements Runnable {
       private int index;
       public MyTask( int index ) { this.index = index; }
       public void run() {
             System.out.prinln( " Task " + index + " is running." );
       }
       public static void main( String[] args ) {
             for( int i=0; i<100; i++ )
                      new Thread( new MyTask(i), String.valueOf(i) ).start();
        }
}


有的时候我们需要每隔一段时间去执行某个任务,在Java中提供了Timer and TimerTask来完成这个任务,本文提供一个应用程序的源代码告诉你如何使用这两个类。

        Timer和TimerTask的方法很少,使用起来也非常方便。希望如果遇到问题参考一下API doc,里面写的很清楚。TimerTask是个抽象类,他扩展了Object并实现了Runnable接口,因此你必须在自己的Task中实现public void run()方法。这也就是我们需要执行的具体任务。Timer实际上是用来控制Task的,他提供的主要方法是重载的schedule()方法。我们这里将使用schedule(TimerTask task,long time,long internal)方法来说明如何使用它。

使用Java中的Timer和TimerTask
-------------------------    
    下面直接提供应用程序的源代码,有得时候感觉说的太多,对初学者作用并不是很大。但是当把代码给他们看了以后,很容易就接受了。下面我要完成的任务就是每隔3秒钟从一个文件中把内容读出来并打印到控制台,文件的内容如下:
ming.txt
hello world
beijing
basketball
java
c/c++
这里涉及到一些IO的知识,但并不复杂。我们使用BufferedReader从文件里面读取内容,一行一行的读取,代码如下:

     try
     {
      BufferedReader br = new BufferedReader(new FileReader("ming.txt"));
      String data = null;
      while((data=br.readLine())!=null)
      {
       System.out.println(data);
      }
     }
     catch(FileNotFoundException e)
     {
      System.out.println("can not find the file");
     }
     catch(IOException e)
     {
      e.printStackTrace();
     }
在主程序中我们启动timer让他开始执行读取文件的工作。整个程序的内容如下
import java.util.*;
import java.io.*;

public class TimerUse
{
public static void main(String[] args)
{
    PickTask pt = new PickTask();
    pt.start(1,3);
}
}

class PickTask
{
private Timer timer;

public PickTask()
{
    timer = new Timer();
}

private TimerTask task = new TimerTask()
{
    public void run()
    {
   
     try
     {
      BufferedReader br = new BufferedReader(new FileReader("ming.txt"));
      String data = null;
      while((data=br.readLine())!=null)
      {
       System.out.println(data);
      }
     }
     catch(FileNotFoundException e)
     {
      System.out.println("can not find the file");
     }
     catch(IOException e)
     {
      e.printStackTrace();
     }
   
    }
};

public void start(int delay,int internal )
{
    timer.schedule(task,delay*1000,internal*1000);
}

}

程序的输出结果为:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\>java TimerUse
hello world
beijing
basketball
java
c/c++
hello world
beijing
basketball
java
c/c++
hello world
beijing
basketball
java
c/c++
hello world
beijing
basketball
java
c/c++

 

分享到:
评论

相关推荐

    JavaTimer和TimerTask实例教程Java开发

    `Timer`实例一旦创建,就会持续运行,直到所有的任务都执行完毕,或者通过调用`cancel`方法显式地停止。 **2. TimerTask类** `TimerTask`是`Timer`用来执行任务的抽象类,你需要继承它并覆盖`run`方法来定义具体的...

    Timer和TimerTask的使用

    ### Timer和TimerTask的使用详解 #### 一、引言 `Timer` 和 `TimerTask` 是Java中用于实现定时任务的重要工具。它们提供了一种简单有效的方式来安排任务的执行,既可以一次性执行也可以周期性地执行。这对于实现...

    Timer与TimerTask(计时器)

    ### Timer与TimerTask详解 在Java编程语言中,`Timer`和`TimerTask`是用于执行定时任务的重要类。这两个类通常被用来处理那些需要在指定时间或周期性执行的任务,比如定时清理缓存、定时更新数据库等场景。 #### ...

    Java中的Timer和TimerTask简介(附完整代码实例)

    它是用来执行任务的类,接收一个TimerTask实例作为参数。通常,Timer类有两种执行任务的模式。最常用的是schedule模式,它可以通过两种方式执行任务:在某个特定时刻开始执行任务;从当前时刻开始,在某个固定时段...

    TimerTask与Timer设计时间监控

    `Timer`类主要负责调度任务,可以创建一个定时器实例,然后安排一个或多个`TimerTask`在未来执行。它有两种主要的方法:`schedule(TimerTask task, long delay)`和`schedule(TimerTask task, Date firstTime, long ...

    ICE_Timer and TimerTask相关

    2. **创建定时器并调度任务**:接着创建一个 `Timer` 实例,并使用 `scheduleRepeated` 方法调度任务。 ```cpp Timer timer; TimerTaskPtr task = new PrintMessageTask(); timer.scheduleRepeated(task, ...

    JAVA定时器之Timer+TimerTask

    在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们构成了Java的定时执行机制。这两个类在处理周期性任务或者延迟任务时非常有用,它们可以帮助开发者实现程序在特定时间点或者按照一定间隔执行特定操作的...

    Timer,TimerTask 动态显示文字

    然后,我们可以创建一个`Timer`实例,并使用`schedule()`方法来安排`TimerTask`的执行: ```java Timer timer = new Timer(); MyTimerTask task = new MyTimerTask(findViewById(R.id.textView)); timer.schedule...

    Web中使用Timer和TimerTask定时获取数据。

    1. **线程安全**:由于`Timer`和`TimerTask`不是线程安全的,因此在多线程的Web应用中,如果多个线程共享同一个`Timer`实例,可能会导致任务调度混乱。为避免这种情况,通常每个任务应拥有自己的`Timer`实例。 2. *...

    Java中的Timer和TimerTask的使用.doc

    这意味着,如果你为同一个`Timer`实例创建了多个`TimerTask`,它们将按照添加到队列的顺序依次执行,而不是并发执行。这在处理多个定时任务时需要注意,因为任务间的依赖关系可能会影响程序的逻辑。 需要注意的是,...

    ServletContextListener,Timer,TimerTask学习笔记

    创建一个`Timer`实例后,可以通过调用`schedule`或`scheduleAtFixedRate`方法来安排任务的执行。下面是一个简单的例子: ```java class MyTask extends TimerTask { @Override public void run() { // 执行的...

    详解JAVA Timer和TimerTask

    下面是一个简单的Timer和TimerTask的实例: ```java import java.util.Timer; import java.util.TimerTask; public class TimerTest { static class MyTimerTask1 extends TimerTask { public void run() { ...

    使用Timer和TimerTask实现周期任务

    一旦创建了 `TimerTask` 实例,就可以通过 `Timer` 对象的 `schedule()` 方法来安排它的执行。 例如,下面是一个简单的 `TimerTask` 示例,它每秒钟打印一条消息: ```java class PrintTask extends TimerTask { ...

    java类Timer和TimerTask的使用.pdf

    `Timer`类是一个线程类,它负责调度和执行`TimerTask`实例。`Timer`类主要有两个方法来安排任务执行: 1. `schedule(TimerTask task, long delay)`:这个方法会在指定的延迟(以毫秒为单位)后执行一次任务。例如,...

    Android Timer TimerTask Handler

    你需要创建一个`TimerTask`实例,并覆盖其`run()`方法,将需要定时执行的代码放入这个方法。然后将`TimerTask`对象传递给`Timer`的`schedule`方法,`Timer`就会在指定的时间点调用`run()`。 3. **Handler** ...

    解析Java中的Timer和TimerTask在Android中的用法和实例

    总结起来,Java的Timer和TimerTask在Android中是实现定时任务的强大工具,它们允许我们在后台线程中按照预设的时间间隔执行任务,并通过Handler与主线程通信,安全地更新UI。然而,使用时需要注意线程管理、资源释放...

    浅谈Timer和TimerTask与线程的关系

    Timer和TimerTask是Java编程语言中用于定时任务执行的两个核心类,它们与线程有着密切的关系。在本文中,我们将深入探讨这两个类的工作原理以及它们如何与线程交互。 首先,`Timer`是一个定时器类,它的主要功能是...

    Java--Timer--TimerTask--.rar_java timer

    值得注意的是,`Timer`和`TimerTask`并不是线程安全的,因此不建议在多线程环境中直接共享一个`Timer`实例。另外,如果`TimerTask`的执行时间超过预定的调度间隔,可能会导致任务堆积,这被称为“定时器饥饿”。为...

    spring + jdk TimerTask定时器

    首先,创建一个`@Component`,实现`TimerTask`,然后定义一个`@Bean`方法来创建`TaskScheduler`实例。 ```java @Component public class SpringTimerTask { private final TimerTask task; public ...

    Java 定时器(Timer,TimerTask)详解及实例代码

    它通过`Timer`类和`TimerTask`类的配合使用来实现定时功能。这两个类位于`java.util`包中。 `Timer`类是定时器的管理器,它负责调度任务的执行。创建一个`Timer`实例后,可以通过`schedule`或`scheduleAtFixedRate`...

Global site tag (gtag.js) - Google Analytics