如何等待计划任务的第一次迭代完成?
How can I wait for first iteration of a scheduled task to complete?
我安排了一个周期性任务。现在我希望主线程等待 ScheduledExecutorService
完成其 first 执行。我怎样才能做到这一点?
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();
}
}
使用CountDownLatch
在线程之间进行协调。
final CountDownLatch latch = new CountDownLatch(1);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
loadInfo();
latch.countDown();
}
}, 1, 5, TimeUnit.MINUTES);
latch.await();
更好的方法可能是计划任务在加载信息后执行回调以更新依赖于该信息的观察者。
我安排了一个周期性任务。现在我希望主线程等待 ScheduledExecutorService
完成其 first 执行。我怎样才能做到这一点?
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();
}
}
使用CountDownLatch
在线程之间进行协调。
final CountDownLatch latch = new CountDownLatch(1);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
loadInfo();
latch.countDown();
}
}, 1, 5, TimeUnit.MINUTES);
latch.await();
更好的方法可能是计划任务在加载信息后执行回调以更新依赖于该信息的观察者。