线程执行有时会加倍

时间:2015-01-16 13:13:08

标签: java multithreading windows-server-2003

我有一个旧应用程序,它有一个每天执行的机器人线程。我有机器人的来源,但我不知道这个胎面是如何开始的。还有一个日志,包括数据库中的一行,有时包括两行相同的行,证明该过程正在执行加倍。

我们使用Windows Server 2003

public void run()
{
while (true)
{
  starter();
  try {
    Thread.sleep(10800000L);
  }
  catch (InterruptedException localInterruptedException)
  {
  }
}
}

我需要让它不止一次执行。

我是新人,不是真正得到一个主题的作品......

提前谢谢大家......

2 个答案:

答案 0 :(得分:0)

你并没有真正提供很多信息,但这里有一些猜测:

  • 整个过程可以启动两次吗?
  • 如果线程运行两次,显示线程运行功能将无济于事。您必须找到创建该线程的代码。
  • 在catch块中记录一些内容。也许睡眠呼叫会立即中断,这就是为什么starter()几乎同时被调用两次的原因。

答案 1 :(得分:0)

public void run()
{
      int delay = 86400000; //milliseconds
      ActionListener taskPerformer = new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
              starter();
          }
      };
      new Timer(delay, taskPerformer).start();
}

或者...

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class DailyTask extends TimerTask {

    @Override
    public void run() {
        //Or if you use a logger like log4j you can insert logger code here.
        System.out.println("Start:" + new Date());
        starter();
        System.out.println("End:" + new Date());
    }

    public static void main(String args[]) {

        TimerTask tt= new DailyTask();
        // running timer task as daemon thread
        Timer t = new Timer(true);
        t.scheduleAtFixedRate(tt, 0, 86400000);
        System.out.println("DailyTask started:" + new Date());
    }

}

这应该每24小时运行一次starter()。