[英]Java Timer Task
我想知道,如果下面的代码将run
,直到无限server
停止?
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");
}
}
}
在server
停止之前,此task
执行吗? 还让我知道如果一项任务中发生任何exception
,执行器会stop
还是随后继续执行nex任务? 有人可以回答..
如果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);
}
}
它将永远运行。 由于捕获了所有异常,因此每个任务运行均成功完成。
当然,这不能保证程序会无限正常地运行,因为您对RetrieveHdrFtrContent
所做的操作可能会产生副作用(例如,内存泄漏)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.