`
wb284551926
  • 浏览: 538599 次
文章分类
社区版块
存档分类
最新评论

Java线程(五):Timer和TimerTask(转载)

 
阅读更多

      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简介(附完整代码实例)。 在Java中,Timer和TimerTask是两个经常用来实现定时器的类。这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求。 Timer是一种定时器工具,用来在一...

    Java线程指南

    Java线程指南 线程安全与不安全 线程同步synchronized和volatile 线程协作-生产者/消费者模式 Timer和TimerTask 线程池 Callable和Future 锁对象Lock-同步问题更完美的处理方式 Condition-线程通信更高效的方式

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

    order_timer这是一个下单后等待结算倒计时的计时器程序,前端使用js进行倒计时显示,后端开辟新的线程进行倒计时及定时相关操作程序原理java.util包中提供了两个非常有用类Timer 、TimerTask。Timer类用来安排任务...

    java8集合源码-java:JDK8新特性

    java8集合源码定时器和定时器任务 定时器是线程调度任务以在后台线程中执行的工具。 任务可以安排为一次性执行,或定期重复执行。 与每个 Timer 对象相对应的是一个单独的后台线程,用于按顺序执行所有计时器的任务...

    Java并发编程(学习笔记).xmind

    确保TimerTask访问的对象本身是线程安全的 Servlet和JSP Servlet本身要是线程安全的 正确协同一个Servlet访问多个Servlet共享的信息 远程方法调用(RMI) 正确协同多个对象中的共享状态 ...

    android 中定时器的3个实现方法(均测试通过)

    android 中定时器的3个实现方法(均测试通过) 一、采用Handler与线程的sleep(long)方法 二、采用Handler的postDelayed(Runnable, long)方法 三、采用Handler与timer及TimerTask结合的方法

    java使用TimerTask定时器获取指定网络数据

    java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建,下面的就用示例来学习...

    Java典型模块

    8.3.1 Timer和TimerTask类 8.3.2 shutdown命令 8.3.3 通过shutdown命令实现网络远程关机 8.4 小结 第3篇 GUI(图形用户界面)开发 第9章 典型的图形用户界面(各种组件) 9.1 Label和Button的用户界面 9.1.1 分析...

    Java之Timer类的使用以及深入理解

    近一直在看线程知识,然后看到Timer定时器使用了线程实现的定时功能,于是了解了解;  本文 从Time类的使用和源码分析两个方面讲解:  1、Time类使用: 1 根据是否循环执行分为两类: 2 3 //只执行一次 4...

    Android 定时任务过程详解

    一、采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式) 二、采用Handler的postDelayed(Runnable, long)方法(最简单的android实现) 三、采用Handler与timer及TimerTask结合的方法(比较多的任务...

    Java实现定时调度的三种方法 - CSDN博客1

    (1)Timer对调度的支持是基于绝对时间,而不是相对时间的,由此任务对系统时钟的改变是敏感的 (2)所有的TimerTask只有一个线程TimerThread

    应用启动页自定义跳转计时器View Demo

    CircleTextProgressbar.java: package com.demo.startpageskiptimerdemo.widget; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.TypedArray; import ...

    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 如何产生...

    Spring3.x企业应用开发实战(完整版) part1

    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 如何产生...

    薛定谔的猫

    薛定谔的猫。 3600秒后波函数坍缩

Global site tag (gtag.js) - Google Analytics