Java 定时器任务

标签 java timer timertask

我想知道下面的代码是否会无限地运行直到服务器停止?

public class Class1()
 {
   public static void main(String args[])
      {
            TimerTask task = new CacheThread();

            Timer timer = new Timer();
            timer.schedule(task, 1000,10000);
      }
  }

我在这里调用下面类中的任务:

     package com.verizon.esupport.cache;

     import java.sql.Timestamp;
     import java.util.Date;
     import java.util.HashMap;
     import java.util.TimerTask;


     public class CacheThread extends TimerTask {//implements java.io.Serializable{


 RetrieveHdrFtrContent rhf = RetrieveHdrFtrContent.getSingleInstance();
 HeaderBean hdrbn = HeaderBean.getSingleInstance();

 String header = "";
 String footer= "";
 String sHeader = "";

@Override
public void run() {

    try{
    // TODO Auto-generated method stub
     HashMap headerm = new HashMap();
     HashMap smallHeaderm = new HashMap();
     HashMap footerMapm = new HashMap();

     Date date = new Date();

     header = rhf.headerContent().toString();
    //  headerm.clear();
    //  hdrbn.setLheaderMap(headerm);
        headerm.put("header", header);
        headerm.put("timeStamp", new Timestamp(date.getTime()));
        hdrbn.setLheaderMap(headerm);

        footer = rhf.footerContent().toString();
        footerMapm.clear();
        hdrbn.setLfooterMap(footerMapm);
        footerMapm.put("footer", footer);
        footerMapm.put("timeStamp", new Timestamp(date.getTime()));
        hdrbn.setLfooterMap(footerMapm);

        sHeader = rhf.smallHeader().toString();
        smallHeaderm.clear();
        hdrbn.setLsmallHeaderMap(smallHeaderm);
        smallHeaderm.put("header", sHeader);
        smallHeaderm.put("timeStamp", new Timestamp(date.getTime()));
        hdrbn.setLsmallHeaderMap(smallHeaderm);

        System.out.println("raising exception :: "+(1/0));

    }
    catch(Exception e)
    {
        e.printStackTrace();
        System.out.println("pls continue the task");
    }
}

}

这个任务会一直执行到服务器停止吗?另外让我知道如果在一个任务中发生任何异常,执行程序会停止还是会继续执行后续的下一个任务?有人可以回答..

最佳答案

如果在 run() 方法中抛出异常,计时器将停止执行您的任务。 您必须在执行操作时在 run() 方法中捕获异常,或者改用 ScheduledExecutorService。

要停止您的应用程序,您必须明确停止线程(或在本例中取消计时器),因为它不是守护线程。

已编辑

从 JavaDoc (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ScheduledExecutorService.html) 复制的 ScheduledExecutorService 示例:

import static java.util.concurrent.TimeUnit.*;
 class BeeperControl {
    private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);

    public void beepForAnHour() {
        final Runnable beeper = new Runnable() {
                public void run() { System.out.println("beep"); }
            };
        final ScheduledFuture<?> beeperHandle = 
            scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
        scheduler.schedule(new Runnable() {
                public void run() { beeperHandle.cancel(true); }
            }, 60 * 60, SECONDS);
    }
 }

关于Java 定时器任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18225380/

相关文章:

java - Java 定时器和 TimerTask

java - @Cacheable 不起作用

java - Asynctask 输出 UI 线程

VBA 定时器类

android - 检测缓冲错误(或超时)Android MediaPlayer - 使用定时器超时?

javascript - 尝试解决倒数计时器问题,该问题导致计时器运行,然后在使用Javascript时崩溃约十秒钟

服务中的 Android 计时器

java - 有谁知道 X.509 证书中的哪些所有字段用于验证数字签名?

java - 试图理解这个从两个排序数组中找到第 K 个最小值的算法

android - 我无法使用计时器播放动画