等待外部线程启动

时间:2016-02-09 11:49:07

标签: java countdownlatch

我使用 Apache 中的name,我想知道它何时完成初始化。我打电话给

FileAlterationMonitor

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

我可以睡一会儿,但等待的时间会根据电脑的速度而有所不同。

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

是否有一个比等待更好的解决方案"足够长"?

1 个答案:

答案 0 :(得分: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();
        }

    }