Выполнение потока иногда удваивается
У меня есть старое приложение, в котором есть поток робота, который выполняется каждый день. У меня есть источник для робота, но я не знаю, как этот протектор запущен. И есть журнал, который включает в себя строку в базе данных, которая иногда включает в себя 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 часа.