Java线程(五):Timer和TimerTask

转载 2015年07月10日 10:02:19

   Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。

        Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

        一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,则需要创建两个Timer。下面来看一个简单的例子:        

  1. import java.util.Timer;  
  2. import java.util.TimerTask;  
  3. public class TimerTest {  
  4.     static class MyTimerTask1 extends TimerTask {  
  5.         public void run() {  
  6.             System.out.println("爆炸!!!");  
  7.         }  
  8.     }     
  9.     public static void main(String[] args) {  
  10.         Timer timer = new Timer();  
  11.         timer.schedule(new MyTimerTask1(), 2000);// 两秒后启动任务  
  12.     }  
  13. }  
        schedule是Timer调度任务的方法,Timer重构了四个schedule方法,具体可以查看JDK API。

        看一个稍复杂的例子,假设有这样一种需求,实现一个连环炸弹,2秒后爆炸一次,3秒后爆炸一次,如此循环下去,这就需要创建两个任务,互相调度,代码如下:

  1. import java.util.Date;  
  2. import java.util.Timer;  
  3. import java.util.TimerTask;  
  4. public class TimerTest {  
  5.     static class MyTimerTask1 extends TimerTask {  
  6.         public void run() {  
  7.             System.out.println("爆炸!!!");  
  8.             new Timer().schedule(new MyTimerTask2(), 2000);  
  9.         }  
  10.     }  
  11.     static class MyTimerTask2 extends TimerTask {  
  12.         public void run() {  
  13.             System.out.println("爆炸!!!");  
  14.             new Timer().schedule(new MyTimerTask1(), 3000);  
  15.         }  
  16.     }  
  17.     public static void main(String[] args) {  
  18.         Timer timer = new Timer();  
  19.         timer.schedule(new MyTimerTask2(), 2000);  
  20.         while(true) {  
  21.             System.out.println(new Date().getSeconds());  
  22.             try {  
  23.                 Thread.sleep(1000);  
  24.             } catch (InterruptedException e) {  
  25.                 // TODO Auto-generated catch block  
  26.                 e.printStackTrace();  
  27.             }  
  28.         }  
  29.     }  
  30. }  

        自JDK5之后,可以用ScheduledThreadPoolExecutor来替代Timer。

        本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/7436458,转载请注明。

Java线程(五):Timer和TimerTask

上一篇:Java线程(三)         Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。         Timer是一...
  • ghsau
  • ghsau
  • 2012年04月08日 00:43
  • 55383

Java线程篇(五):Timer和TimerTask

Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。         Timer是一种线程设施,用于安排以后在后台线程中执...

Java多线程2-线程协作、Timer和TimerTask

http://blog.csdn.net/undoner/article/details/8139178  线程协作        生产者/消费者模式是一个经典的线程同步以...

Java多线程2-线程协作、Timer和TimerTask

线程协作        生产者/消费者模式是一个经典的线程同步以及通信的模型。         假设有这样一种情况,有一个盘子,盘子里只能放一个鸡蛋,A线程专门往盘子里放鸡蛋,如果盘子里有鸡蛋,则...
  • undoner
  • undoner
  • 2012年11月02日 08:43
  • 1215

0090 Java线程:Timer和TimerTask【基础】

Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。         Timer是一种线程设施,用于安排以后在后台线程中执行的...

线程的生命周期以及Timer和TimerTask的使用

线程的生命周期   线程的生命周期:一个线程从创建到消亡的过程。   如下图,表示线程生命周期中的各个状态:       线程的生命周期可以分为四个状态: 1.创建状态:   当用n...

线程配合及Timer TimerTask理解

1、 认识Thread和Runnable  Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口。Runnable是接口,建议用接口的方式生成线程,因为接口可以实现多继承,...

Timer和TimerTask与线程的关系

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

Timer和TimerTask与线程的关系

1. Timer是一个定时器,它可以根据指定的时间,指定的执行周期来执行固定的任务TimerTask,例子如下: Timer与线程的关系,在Timer源代码中可现如下代码: 1. 以下为Tim...

Java多线程基础(二)定时器类:Timer类和TimerTask类

Java多线程基础(二)定时器类:Timer类和TimerTask类Timer类和TimerTask类是jdk实现定时器功能的早期方法,jdk1.5以前就支持Timer类和TimerTask类。JDK...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java线程(五):Timer和TimerTask
举报原因:
原因补充:

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