当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
计算机二级辅导:Java计时器Timer使用
发布时间:2010/3/13 9:01:33 来源:城市学习网 编辑:MOON
  所有类型的 Java 应用程序一般都需要计划重复执行的任务
  Timer类是用来执行任务的类,它接受一个TimerTask做参数
  java.util.Timer 和 java.util.TimerTask ,它们使程序员可以很容易地计划简单的任务
  Timer
  Timer最常用的是schedule执行任务的模式,,它可以以两种方式执行任务:
  1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率.
  看个简单的例子:
  Java代码
  import java.io.IOException;
  import java.util.Timer;
  public class TimerTest {
  public static void main(String args){
  Timer timer = new Timer();
  timer.schedule(new Job(), 5000, 10000);//在5秒后执行此任务,每次间隔60秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
  /*
  //这个是用来停止此任务的,否则就一直循环执行此任务了
  while(11){
  try {
  if(22){
  timer.cancel();//使用这个方法退出任务
  }
  } catch (IOException e)
  e.printStackTrace();
  } */
  }
  static class Job extends java.util.TimerTask{
  @Override
  public void run() {
  // TODO Auto-generated method stub
  System.out.println("so...easy!");
  }
  }
  }
  import java.io.IOException;
  import java.util.Timer;
  public class TimerTest {
  public static void main(String args){
  Timer timer = new Timer();
  timer.schedule(new Job(), 5000, 10000);//在5秒后执行此任务,每次间隔60秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
  /*
  //这个是用来停止此任务的,否则就一直循环执行此任务了
  while(11){
  try {
  if(22){
  timer.cancel();//使用这个方法退出任务
  }
  } catch (IOException e)
  e.printStackTrace();
  } */
  }
  static class Job extends java.util.TimerTask{
  @Override
  public void run() {
  // TODO Auto-generated method stub
  System.out.println("so...easy!");
  }
  }
  }
  TimerTask 刚才在代码里提到了 TimerTask 类。TimerTask类里有一个抽象方法run(),我们把任务写到run()方法里,或由run()执行其他方法.
  完整的代码:
  Java代码
  public class TimerTest{
  public static void main(String args){
  int delay=5000;//延迟5秒
  Timer timer=new Timer();//生成一个Timer对象
  NewTask myTask=new NewTask();//初始化我们的任务
  timer.schedule(yourTask,delay);//还有其他重载方法...
  }
  }
  class NewTask extends TimerTask{//继承TimerTask类
  public void run(){
  System.out.println("printing!");
  }
  }
  public class TimerTest{
  public static void main(String args){
  int delay=5000;//延迟5秒
  Timer timer=new Timer();//生成一个Timer对象
  NewTask myTask=new NewTask();//初始化我们的任务
  timer.schedule(yourTask,delay);//还有其他重载方法...
  }
  }
  class NewTask extends TimerTask{//继承TimerTask类
  public void run(){
  System.out.println("printing!");
  }
  }这样这个程序就会在五秒钟后输出 printing!
  Timer的功能是相当强大的,若要详细了解,可以查看帮助文档.
  完整案例!
  现在大家看一下我写的关于实现LED滚屏显示动态信息!
  web 监听:
  Java代码
  package com.ving.xzfw.led;
  import java.util.Timer;//定时器类
  import javax.servlet.ServletContextEvent;
  import javax.servlet.ServletContextListener;
  import javax.servlet.ServletContext;
  import org.apache.log4j.Logger;
  import com.ving.xzfw.util.GetInformation;
  //import com.ving.xzfw.lwsp.GetConfigInfor;
  public class LEDListener implements ServletContextListener {
  private Timer timer = null;
  private Logger log = Logger.getLogger(getClass());
  // GetconfigInfor config = new GetconfigInfor();
  GetInformation getInfo = new GetInformation("bpelConfig.properties");
  Integer runTime = Integer.parseInt(getInfo.getProperty("led.TimingRunTime"));
  String fileRealPath = "";
  String templePath = "";
  public void contextInitialized(ServletContextEvent event) {
  // 在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
  ServletContext context = event.getServletContext();
  fileRealPath = context.getRealPath("")
  + System.getProperty("file.separator") + "LEDFile"
  + System.getProperty("file.separator");
  templePath = context.getRealPath("")
  + System.getProperty("file.separator") + "led"
  + System.getProperty("file.separator");
  timer = new Timer();
  log.info("定时器已启动");// 添加日志,可在tomcat日志中查看到
  timer.schedule(new LEDTimerTack(fileRealPath, templePath), 20000, runTime);
  log.info("已经添加任务");
  }
  public void contextDestroyed(ServletContextEvent event) {// 在这里关闭监听器,所以在这里销毁定时器。
  timer.cancel();
  log.info("定时器销毁");
  }
  }
  package com.ving.xzfw.led;
  import java.util.Timer;//定时器类
  import javax.servlet.ServletContextEvent;
  import javax.servlet.ServletContextListener;
  import javax.servlet.ServletContext;
  import org.apache.log4j.Logger;
  import com.ving.xzfw.util.GetInformation;
  //import com.ving.xzfw.lwsp.GetConfigInfor;
  public class LEDListener implements ServletContextListener {
  private Timer timer = null;
  private Logger log = Logger.getLogger(getClass());
  //GetconfigInfor config = new GetconfigInfor();
  GetInformation getInfo = new GetInformation("bpelConfig.properties");
  Integer runTime = Integer.parseInt(getInfo.getProperty("led.TimingRunTime"));
  String fileRealPath = "";
  String templePath = "";
  public void contextInitialized(ServletContextEvent event) {
  // 在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
  ServletContext context = event.getServletContext();
  fileRealPath = context.getRealPath("")
  + System.getProperty("file.separator") + "LEDFile"
  + System.getProperty("file.separator");
  templePath = context.getRealPath("")
  + System.getProperty("file.separator") + "led"
  + System.getProperty("file.separator");
  timer = new Timer();
  log.info("定时器已启动");// 添加日志,可在tomcat日志中查看到
  timer.schedule(new LEDTimerTack(fileRealPath, templePath), 20000, runTime);
  log.info("已经添加任务");
  }
  public void contextDestroyed(ServletContextEvent event) {// 在这里关闭监听器,所以在这里销毁定时器。
  timer.cancel();
  log.info("定时器销毁");
  }
  }
  LEDTimeTrack
  Java代码
  package com.ving.xzfw.led;
  import java.util.TimerTask;
  public class LEDTimerTack extends TimerTask {
  String fileRealPath = "";
  String templePath = "";
  String type="";
  int floor;
  public LEDTimerTack(String fileRealPath,String templePath,String type,Integer floor) {
  this.fileRealPath=fileRealPath;
  this.templePath=templePath;
  this.type =type;
  this.floor=floor;
  }
  public LEDTimerTack(String fileRealPath,String templePath) {
  this.fileRealPath=fileRealPath;
  this.templePath=templePath;
  }
  public void run( ) {
  for(int i=1;i=3;i++)
  //呵呵,这里就是led动态生成信息的代码!
  XlsUtil.createHtmlFile(templePath, fileRealPath,i);
  }
  }
  :
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved