0

FileAlterationMonitorApache使用,我想知道它什么时候完成初始化。我打电话

fileAlterationMonitor.start();

它启动一个新线程,我的程序继续运行,之前fileAlterationMonitor完成初始化。我想等待初始化完成,但我找不到检查何时完成的方法。

我可以睡一会儿,但等待多长时间会因计算机的速度而异。

我已经看过了CountDownLatch,这在我自己的代码中似乎很简单,但是我该如何使用它FileAlterationMonitor呢?它不能扩展它,因为它是最终的。

有没有比等待“足够长”更好的解决方案?

4

1 回答 1

0

您可以使用CountDownLatch并添加FileAlterationObserver哪个会将闩锁#initialize()计入observers.

这可以像下面这样实现:

    {

        FileAlterationMonitor monitor = new FileAlterationMonitor();
        Iterator<FileAlterationObserver> iterator = monitor.getObservers().iterator();

        FileAlterationObserver last = null;
        while (iterator.hasNext()) {
            last = iterator.next();
        }

        final CountDownLatch cdl = new CountDownLatch(1);

        monitor.removeObserver(last);
        monitor.addObserver(new FileAlterationObserver(last.getDirectory(), last.getFileFilter()) {

            @Override
            public void initialize() throws Exception {
                super.initialize();
                cdl.countDown();
            }
        });

        try {
            // wait until last observer would be initialized
            monitor.start();
            cdl.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
于 2016-02-09T11:50:40.727 回答