Я разрабатываю jar, который запускает 3 потока, как показано в описании и коде ниже.
- Первый модуль реализует прослушиватель файла в определенном каталоге, который выполняет метод, когда файлсоздал.
- Во втором реализован таймер, который активируется каждые 20 секунд и в зависимости от внешних обстоятельств может вставлять файл в каталог, просматриваемый первым потоком
Третий такжереализует таймер каждые 10 секунд, который выполняет метод, который не взаимодействует с первыми двумя.
public class Example{
public static void main(String[] args) throws Exception{
try {
Executor runner = Executors.newFixedThreadPool(1);
runner.execute(new FileWatcher());
} catch (Exception ex) {
log.error("Error al lanzar el demonio FileWatcher", ex);
}
int delay = 1000; // delay for 1 sec.
final int period = 20000;
Timer timer = new Timer();
final EditFile ef = new EditFile();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
ef.edit();
}
}, delay, period);
int delay2 = 1000; // delay for 1 sec.
final int period2 = 10000;
Timer timer2 = new Timer();
final SendFile sf= new SendFile();
timer2.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
sf.sendFile();
}
}, delay2, period2);
}}
Основная проблема, с которой я сталкиваюсь, заключается в том, что первые два потока иногда мешают друг другу (поскольку они изменяют один и тот же каталог), создавая непредвиденные поведения.
Как я могу убедиться, что один процесс не запускается, если другой активен или ждет, пока он не будет завершен?
Я думал о реализации семафора, но никогда не использовал его и не знаю,это может быть лучшим подходом к моей проблеме.