Java 等待外部线程启动

Java 等待外部线程启动,java,countdownlatch,Java,Countdownlatch,我使用Apache中的FileAlterationMonitor,我想知道初始化何时完成。我打电话 fileAlterationMonitor.start(); 在初始化fileAlterationMonitor完成之前,启动一个新线程,然后我的程序继续运行。我想等待初始化完成,但我找不到检查何时完成的方法 我可以睡一会儿,但等待的时间会根据计算机的速度而有所不同 我已经看过了CountDownLatch,这在我自己的代码中似乎很简单,但是我如何在FileAlterationMonitor上使

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

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

我可以睡一会儿,但等待的时间会根据计算机的速度而有所不同

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


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

您可以使用
倒计时闩锁
并添加
FileAlterationObserver
,将
#initialize()
上的闩锁计数到
观察者的尾部

这可以按如下方式实现:

    {

        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();
        }

    }
{
FileAlterationMonitor=新建FileAlterationMonitor();
迭代器迭代器=monitor.getObservers().Iterator();
FileAlterationObserver last=null;
while(iterator.hasNext()){
last=迭代器.next();
}
最终倒计时锁存器cdl=新倒计时锁存器(1);
monitor.removeObserver(最后一个);
monitor.addObserver(新的FileAlterationObserver(last.getDirectory(),last.getFileFilter()){
@凌驾
public void initialize()引发异常{
super.initialize();
cdl.倒计时();
}
});
试一试{
//等待最后一个观察者初始化
monitor.start();
cdl.wait();
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}
}

我不太明白,你能举个例子吗。