Мне нужно, чтобы определенная функция приложения не запускалась одновременно с самой собой.Риск значительный, потому что эта функция находится в коде, переданном в java.util.Timer (повторяется каждую минуту в течение нескольких часов), и процесс, который устанавливает функцию, завершается и возвращается к командной строке bash.Затем пользователь может вызвать ту же программу.Другой риск связан с тем, что у пользователя есть два или более консольных окна, и они по ошибке запускают программу в обоих консольных окнах.
Я думаю, что семафор в масштабе всей операционной системы с Java API может помочь.Доступен ли такой архив Java?
Меня спросили, используются ли несколько JVM.Я думаю, что если открыто несколько консолей, то подразумевается наличие нескольких JVM.
Это моя оболочка для использования Java Timer и TimerTask.
public final class TimedExecutorWrapper
{ ... various private members ...
public Timer go()
{
Timer myTimer = new Timer();
myTimer.scheduleAtFixedRate(this.myTask,
this.startTodayAtThisTime,
this.frequencyInSeconds * 1000);
TimerTask myTaskToInvokeCancel = new TaskToInvokeCancel(myTimer);
// use the same Timer to schedule the task that cancels and purges
myTimer.schedule(myTaskToInvokeCancel,
this.stopTodayAtThisTime);
return myTimer;
}
private final class TaskToInvokeCancel extends TimerTask
{
private Timer timer; // to be cancelled and purged
TaskToInvokeCancel(Timer timer)
{
this.timer = timer;
}
public void run()
{
this.timer.cancel(); // discards any scheduled tasks without
// interfering with any running task
this.timer.purge();
}
}
}