使用Java中的Timer和TimerTask

原创 2004年07月04日 19:36:00

      有的时候我们需要每隔一段时间去执行某个任务,在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)方法来说明如何使用它。

      下面直接提供应用程序的源代码,有得时候感觉说的太多,对初学者作用并不是很大。但是当把代码给他们看了以后,很容易就接受了。下面我要完成的任务就是每隔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++

Java线程和多线程(十)——TimerTask

Java中的java.util.Timer是一个工具类,可以用于调度一个线程在将来的某一个时刻执行特定的任务。Java Timer类可以将一个任务定时执行一次,或者是以后以每隔一定的时间间隔来触发一次...
  • EthanWhite
  • EthanWhite
  • 2016年10月15日 19:12
  • 6451

java定时任务类Timer和TimerTask用法详解

java定时任务类Timer和TimerTask用法详解 代码下载地址:http://www.zuidaima.com/share/1550463277550592.htm...
  • yaerfeng
  • yaerfeng
  • 2014年07月25日 10:23
  • 8005

【Java】利用Timer与TimerTask定时执行任务

在Java里面定时执行一条任务多用于线程与进程配合Thread.currentThread().sleep(XXX);来实现,但是一些小型的任务其实完全利用Timer与TimerTask定时执行,Ti...
  • yongh701
  • yongh701
  • 2015年03月01日 08:38
  • 1790

浅谈java定时任务:TimerTask

java 定时任务TimerTask定时任务有很多种实现,网上也有很多开源的定时任务框架可以参考,但博主只简单介绍一下博主使用到的四种定时任务的实现:Timer和TimerTaks、spring、qu...
  • Y18630246793194530
  • Y18630246793194530
  • 2017年03月31日 20:51
  • 286

《Java源码分析》:Timer/TimerTask

《Java源码分析》:Timer在JDK 5.0之前,java.util.Timer/TimerTask是唯一的内置任务调度方法,而且在很长一段时间里很热衷于使用这种方式进行周期性任务调度。本篇博文就...
  • u010412719
  • u010412719
  • 2016年08月05日 22:06
  • 987

Java多线程总结(3)— Timer 和 TimerTask深入分析

1. 基本概念  java.util.Timer:是一个实用工具类,该类用来调度一个线程(schedule a thread),使它可以在将来某一时刻执行。 Java的Timer类可以调度一个任务运行...
  • Mark_LQ
  • Mark_LQ
  • 2015年12月15日 22:31
  • 3384

TimerTask类和Timer类的cancel()方法详解

无论是TimerTask类还是Timer类,其cancel()方法都是为了清除任务队列中的任务。虽然都是清除任务队列中的任务,却有一些不同:TimerTask类中的cancel()方法侧重的是将自身从...
  • qq_30493075
  • qq_30493075
  • 2017年08月11日 17:43
  • 834

Timer和TimerTask与线程的关系

1. Timer是一个定时器,它可以根据指定的时间,指定的执行周期来执行固定的任务TimerTask,例子如下: Timer与线程的关系,在Timer源代码中可现如下代码: 1. ...
  • kouwoo
  • kouwoo
  • 2015年11月06日 10:25
  • 2719

Java—Timer和TimerTask详解(常用API)

以下内容根据 The JavaTM Tutorial 和相关API doc翻译整理,以供日后参考: 1.概览 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行...
  • weiguishan
  • weiguishan
  • 2015年02月23日 12:32
  • 1753

Java Timer 和 TimerTask 那些事

以下是本人的一些拙见,知识有限: 貌似Java设计者就没有考虑重用这回事,用完干掉,要用再创建,累不累啊 这个Timer就让我很蛋疼,使用是简单, mTimer = new Timer(); m...
  • z1074971432
  • z1074971432
  • 2012年08月08日 17:29
  • 6126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Java中的Timer和TimerTask
举报原因:
原因补充:

(最多只允许输入30个字)