等待外部线程启动

Wait for external Thread to start

我使用 Apache 中的 FileAlterationMonitor,我想知道它何时完成初始化。我叫

fileAlterationMonitor.start();

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

我可以睡一会儿,但要等多久取决于电脑的速度。

我查看了 CountDownLatch,这在我自己的代码中看起来很简单,但我如何在 FileAlterationMonitor 上使用它?它不能扩展它,因为它是最终的。

有没有比等待更好的解决方案"long enough"?

您可以使用 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();
        }

    }