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

Timer与TimerTask实例

阅读更多
[size=medium]今天看了一下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++
[/size]
http://hi.baidu.com/suofang/blog/item/046459fb317d3b156d22ebf7.html
分享到:
评论

相关推荐

    JavaTimer和TimerTask实例教程Java开发

    JavaTimer和TimerTask实例教程Java开发Java经验技巧共3页.pdf.zip

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

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

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

    本篇文章主要介绍了解析Java中的Timer和TimerTask在Android中的用法,主要介绍了Timer和TimerTask的用法,有需要的可以了解一下。

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

    主要介绍了 Java 定时器(Timer,TimerTask)详解及实例代码的相关资料,需要的朋友可以参考下

    Spring定时器实例(Java的Timer类和OpenSymphony的Quartz)

    Spring两种定时器实例配置:Java的TimerTask类和OpenSymphony的Quartz。包含5种配置方式:timer普通定时器、timer特定方法定时器、quartz简单定时器、quartz精确定时器、quartz特定方法定时器。简单实用,一看就会。

    order_timer:订单计时器_下单结算倒计时

    我们可以通过下面来实现一个定时任务:1、定义一个实现了TimerTask的自定义类MyTimerTask(别忘了实现父类中的抽象方法run()),并创建一个实例mytask.2、创建Timer的一个实例:Timer mytimer= new Timer();...

    Android 实现定时器的四种方式总结及实现实例

    第一种方式利用Timer和TimerTask 1、继承关系 java.util.Timer 基本方法 schedule 例如: timer.schedule(task, delay,period); //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。 ...

    Android TimerTask 的简单应用及注意事项

    主要介绍了Android TimerTask 的简单应用及注意事项的相关资料,需要的朋友可以参考下

    viewPager循环广告位实现

    ViewPager -- 在Android3.0引入 &gt;为了让低版本使用这个组件, 需要Android-support-v4.jar 1. 解除依赖 android denpency(工程右键-属性--javabuildpath -library ...定时循环播放图片使用Timer和TimerTask实现

    Android-IM架构设计

    1)协议与任务的封装2)消息(任务)流程定时任务的实现主要由TimerHelper类与ITimerProcessor两个类,第一个类主要实现了Timer的功能,ITimerProcessor为一个接口,当要建立一个Timer的时候,需要新建立一个类实现...

    Android实现计时与倒计时的常用方法小结

    Timer与TimerTask(Java实现) public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; Timer timer = new Timer(); public void onCreate(Bundle savedInstanceState)...

    Android实现定时器的五种方法实例详解

    Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用。 跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需要对有大量对象的...

    java的定时器使用方法.txt

    使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务。 schedule...

    定时器的使用可实现具体任务

    使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法, 设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask是抽象类, 继承并重写其run()方法,可实现具体任务。

    AlarmManager-master:AlarmManager计时器【倒计时】

    AlarmManager-masterAlarmManager计时器【倒计时】在实际讨论之前,我们首先看一个实例[网上的一个范例,拿来直接使用,写的很好,明白易懂]之后,然后再讨论Android中Timer和AlarmManager的具体区别在Android上常用...

    Android RecyclerView实现拼团倒计时列表实例代码

    首先,有关时间变化的,首先想到TimerTask+Timer这个定时器组合,列表不用多说RecyclerView。其中涉及到UI更新,所以需要一个handler来更新item。 初步我们会想到两种方式: 每个item使用一个timer,更新item

    Android 使用 DowanloadManager 实现下载并获取下载进度实例代码

    Android 使用 DowanloadManager 实现下载并获取下载进度实例代码 实现代码: package com.koolsee.gallery; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util....

    Spring.3.x企业应用开发实战(完整版).part2

    13.4.1 Timer和TimerTask 13.4.2 Spring对JDK Timer的支持 13.5 Spring对JDK 5.0 Executor的支持 13.5.1 了解JDK 5.0的Executor 13.5.2 Spring对Executor所提供的抽象 13.6 实际应用中的任务调度 13.6.1 如何产生...

Global site tag (gtag.js) - Google Analytics