Java:如何使一段代码连续运行

时间:2014-07-29 10:31:00

标签: java

我有一段持续5分钟的Java代码 并计划每60秒运行一次任务。

问题:如何更改代码以使其永久运行并每1分钟执行一次任务:

代码:

public class MyTimerTask extends TimerTask{
@Override
public void run() {
    System.out.println("Timer task started at:" + new Date());
    completeTask();
    System.out.println("Timer task finished at:" + new Date());
}

private void completeTask() {
    //Task to be exeucted
}

public static void main(String args[]) {
    TimerTask timerTask = new MyTimerTask();
    // running timer task as daemon thread
    Timer timer = new Timer(true);
    // schedule the task to run every 1 minute
    timer.scheduleAtFixedRate(timerTask, 0, 60 * 1000);
    System.out.println("TimerTask started");
    // cancel after sometime

    try {
        Thread.sleep(300*1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    //timer.cancel();
    System.out.println("TimerTask cancelled");
    try {
        Thread.sleep(30000);
    } 

    catch (InterruptedException e) {
        e.printStackTrace();
    }

   }
 }

请告知

1 个答案:

答案 0 :(得分:0)

答案很简单,因为您将其作为守护程序运行,主线程将休眠五分钟,之后在您的应用程序上没有运行其他“本地”线程,因此应用程序终止。

如果你没有充分的理由将Timer作为守护进程运行,那你就不应该这样做。

取自Timer类的documentation“如果定时器将用于安排重复的”维护活动“,则必须执行守护程序线程,只要应用程序正在运行,就必须执行该操作,但不应延长应用程序的生命周期。“。

处理此问题的最简单方法是使用不带布尔值的构造函数(即

  

定时器计时器=新的计时器();

)。这将使它“永远”运行。

但是,如果由于某种原因,您必须将其作为守护程序运行,则只需插入一个永久运行的while循环:

  

while(!false){}

这应该放在主方法的末尾。

你应该记住,这也会阻止应用程序停止,因为只要true不等于false(即永远),这段代码就会阻塞主线程。