信号量与其他避免碰撞的工具

时间:2018-10-08 21:08:12

标签: java semaphore

我正在开发一个运行3个线程的jar,如下面的描述和代码所示。

  • 第一个模块在特定目录上实现文件侦听器,该目录在创建文件时执行方法。
  • 第二个计时器实现了一个计时器,该计时器每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);
    
    }}
    

我面临的主要问题是前两个线程有​​时会相互干扰(因为它们会更改同一目录),从而导致意外行为。

如果另一个进程处于活动状态或等待完成,如何确保一个进程不运行?

我当时在考虑信号量的实现,但是我从未使用过它,也不知道它是否可能是解决我的问题的最佳方法。

0 个答案:

没有答案