Java入门:Java语言中Timer类的简洁用法

2016-02-19 20:23 4 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐Java入门:Java语言中Timer类的简洁用法,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

所有类型的 Java 应用程序一般都需要计划重复执行的任务。企业应用程序需要计划每日的日志或者晚间批处理过程。一个 J2SE 或者 J2ME 日历应用程序需要根据用户的约定计划闹铃时间。不过,标准的调度类 Timer 和 TimerTask 没有足够的灵活性,无法支持通常需要的计划任务类型。在本文中,Java 开发人员 Tom White 向您展示了如何构建一个简单通用的计划框架,以用于执行任意复杂的计划任务。
  
  把 java.util.Timer 和 java.util.TimerTask 统称为 Java 计时器框架,它们使程序员可以很容易地计划简单的任务(注意这些类也可用于 J2ME 中)。在 Java 2 SDK, Standard Edition, Version 1.3 中引入这个框架之前,开发人员必须编写自己的调度程序,这需要花费很大精力来处理线程和复杂的 Object.wait() 方法。不过,Java 计时器框架没有足够的能力来满足许多应用程序的计划要求。甚至一项需要在每天同一时间重复执行的任务,也不能直接使用 Timer 来计划,因为在夏令时开始和结束时会出现时间跳跃。
  
  本文展示了一个通用的 Timer 和 TimerTask 计划框架,从而允许更灵活的计划任务。这个框架非常简单 ?? 它包括两个类和一个接口 ?? 并且容易掌握。如果您习惯于使用 Java 定时器框架,那么您应该可以很快地掌握这个计划框架。
  
  计划单次任务
  
  计划框架建立在 Java 定时器框架类的基础之上。因此,在解释如何使用计划框架以及如何实现它之前,我们将首先看看如何用这些类进行计划。
  
  想像一个煮蛋计时器,在数分钟之后(这时蛋煮好了)它会发出声音提醒您。清单 1 中的代码构成了一个简单的煮蛋计时器的基本结构,它用 Java 语言编写:
  
  清单 1. EggTimer 类
  
  package org.tiling.scheduling.examples;
  import java.util.Timer;
  import java.util.TimerTask;
  public class EggTimer {   
      private final Timer timer = new Timer();
      private final int minutes;
      public EggTimer(int minutes) { 
         this.minutes = minutes;
      }
      public void start() { 
         timer.schedule(new TimerTask() { 
             public void run() { 
                 playSound(); 
                 timer.cancel();
              } 
             private void playSound() { 
                 System.out.println("Your egg is ready!");
                  // Start a new thread to play a sound...
              } 
         }, minutes * 60 * 1000);
      } 
     public static void main(String[] args) { 
         EggTimer eggTimer = new EggTimer(2); 
         eggTimer.start();
      }
  }
  
  EggTimer 实例拥有一个 Timer 实例,用于提供必要的计划。用 start() 方法启动煮蛋计时器后,它就计划了一个 TimerTask,在指定的分钟数之后执行。时间到了,Timer 就在后台调用 TimerTask 的 start() 方法,这会使它发出声音。在取消计时器后这个应用程序就会中止。

来源:http://www.tulaoshi.com/n/20160219/1623524.html

延伸阅读
Java提供了两类主要的异常:runtime exception和checked exception。所有的checked exception是从java.lang.Exception类衍生出来的,而runtime exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的。 !-- frame contents -- !-- /frame contents -- 它们的不同之处表现在两方面:机制上和逻...
众所周知,return 只能用在有返回类型的函数中,但是有返回值的函数一定要有return吗?return都可以用在函数的哪些地方呢?这是本文需要讨论的问题。 例一: class test { public String test() { if(true){ return ""; } else{ return ""; } } } 上面这样即可通过编译,但是下面这两个例子却不能通过编译: (一) class test ...
  什么是UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 为什么要使用UDP 在选择使用协议的时候,选择UDP必须要谨慎。在...
Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。 随着越来越多的服务...
我们在C语言编程中会碰到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的: int printf( const char* format, ...); !-- frame contents -- !-- /frame contents -- 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法: printf("%d",i); printf...

经验教程

663

收藏

35
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部