Выполнение потока иногда удваивается

У меня есть старое приложение, в котором есть поток робота, который выполняется каждый день. У меня есть источник для робота, но я не знаю, как этот протектор запущен. И есть журнал, который включает в себя строку в базе данных, которая иногда включает в себя 2 одинаковые строки, доказывая, что процесс выполняется в два раза.

мы используем Windows Server 2003

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

Мне нужно, чтобы он не выполнялся более одного раза.

Я новичок в шагах, на самом деле пока не понимаю, как работает тема...

Спасибо всем заранее...

2 ответа

Вы на самом деле не предоставляете много информации, но вот несколько предположений:

  • Может ли весь процесс быть запущен дважды?
  • Если поток выполняется дважды, показ функции запуска потока не поможет. Вам нужно будет найти код, который создает поток.
  • Зарегистрируйте что-нибудь в блоке catch. Возможно, звонок во время сна прерывается немедленно, и именно поэтому starter() вызывается дважды почти одновременно.
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());
    }

}

Это должно запускаться starter() один раз каждые 24 часа.

Другие вопросы по тегам