在我的应用程序中,我有两个jtextpanes,我有一个executorservice instacne,其中包含很少的任务。我想确保在执行任何jtextpanes的FocusListener focusGained方法之前,executorservice实例中的所有任务都已完成。另外,当调用focusLost方法时,我还会向executorservice添加更多任务。
代码
top.addFocusListener(new FocusListener()
{
public void focusLost(FocusEvent e)
{
if (ecaViewControl.isInitialized())
{
stopRecording();
executor.execute(new Runnable()
{
public void run()
{
ecaViewControl.save(top);
}
});
executor.execute(new Runnable()
{
public void run()
{
ecaViewControl.closeDocument();
}
});
}
}
public void focusGained(FocusEvent e)
{
//Need to have completed all the task in executor service before EDT executes the code in here
});
}
答案 0 :(得分:1)
如果您确实知道要完成的任务数量,请考虑使用CountDownLatch
因此您的代码可能如下所示:
public void run() {
try {
// do something here
} finally {
latch.countDown()
}
}
然后在代码中等待任务完成 - 只需等待latch:
latch.await();
或者,如果您没有遗嘱执行人,可以使用CompletionService。