我正在开发一个运行3个线程的jar,如下面的描述和代码所示。
第三个也每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);
}}
我面临的主要问题是前两个线程有时会相互干扰(因为它们会更改同一目录),从而导致意外行为。
如果另一个进程处于活动状态或等待完成,如何确保一个进程不运行?
我当时在考虑信号量的实现,但是我从未使用过它,也不知道它是否可能是解决我的问题的最佳方法。