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