Java 执行线程有时会加倍

Java 执行线程有时会加倍,java,multithreading,windows-server-2003,Java,Multithreading,Windows Server 2003,我有一个旧的应用程序,它有一个每天执行的机器人线程。我有机器人的来源,但我不知道这是怎么开始的。还有一个日志,它包含数据库中的一行,有时包含两行相同的行,证明进程正在执行 我们使用WindowsServer2003 public void run() { while (true) { starter(); try { Thread.sleep(10800000L); } catch (InterruptedException localInterruptedExcepti

我有一个旧的应用程序,它有一个每天执行的机器人线程。我有机器人的来源,但我不知道这是怎么开始的。还有一个日志,它包含数据库中的一行,有时包含两行相同的行,证明进程正在执行

我们使用WindowsServer2003

public void run()
{
while (true)
{
  starter();
  try {
    Thread.sleep(10800000L);
  }
  catch (InterruptedException localInterruptedException)
  {
  }
}
}
我需要防止它执行多次

我是新手,还没有真正掌握线程的工作


提前感谢大家……

您提供的信息并不多,但这里有一些猜测:

  • 整个过程能否启动两次
  • 如果线程运行两次,则显示线程运行函数将没有帮助。您必须找到创建线程的代码
  • 在catch块中记录一些内容。可能睡眠调用会立即中断,这就是为什么几乎同时调用两次
    starter()
或者


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

我认为答案要简单得多,但我可能错了,他从来没有提到几乎同时调用了两次
starter()
。难道他只需要增加睡眠时间吗?我找不到启动这个过程的代码。这就是为什么我不能纠正这个问题。我不知道它是否直接从服务器上的ApacheOU执行。我们没有关于这方面的任何文档,也没有人在公司中实现该软件。@CarlosJunior是否可以在代码库中搜索包含此代码的类的所有用法?这不会产生那么多的结果,是吗?另一个选择是考虑使用类似的东西,但它的设置需要更多的工作,但可能更可靠。有一种方法可以防止它运行多个姿态?比如使用标志或其他东西(比如AtomicBoolean),您可以在run方法上使用java synchronized关键字从其他线程锁定该方法<代码>公共同步作废运行()
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());
    }

}