我使用 Apache 中的name
,我想知道它何时完成初始化。我打电话给
FileAlterationMonitor
启动一个新线程,我的程序继续运行,fileAlterationMonitor.start();
初始化之前。我想等待初始化完成,但我找不到一种方法来检查它何时完成。
我可以睡一会儿,但等待的时间会根据电脑的速度而有所不同。
我查看了fileAlterationMonitor
,这在我自己的代码中看起来很简单,但我如何在CountDownLatch
上使用它?它不能延伸,因为它是最终的。
是否有一个比等待更好的解决方案"足够长"?
答案 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();
}
}