我安排了一项经常性的任务。现在我希望主线程等待ScheduledExecutorService
完成第一次执行。我怎么能做到这一点?
public void test1(){
refreshFunction(); /* This should block until task has executed once. */
/* Continue with main thread. */
...
}
public void refreshFunction() {
try {
scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
loadInfo();
}
}, 1, 5, TimeUnit.MINUTES);
logger.info(" : Completed refreshing information : "
+ new Timestamp(System.currentTimeMillis()));
} catch (Exception ex) {
ex.printStackTrace();
}
}
答案 0 :(得分:2)
使用CountDownLatch
来协调线程。
final CountDownLatch latch = new CountDownLatch(1);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
loadInfo();
latch.countDown();
}
}, 1, 5, TimeUnit.MINUTES);
latch.await();
更好的方法可能是计划任务在加载信息后执行回调以更新依赖于该信息的观察者。