【发布时间】:2021-07-11 08:08:12
【问题描述】:
主要目标是使用 ScheduledExecutorService 运行一个方法,并等待其所有任务完成后再恢复主线程。
我在自定义 Scheduler 类中创建了一个实用方法,它接受任何 Runnable:
public void scheduleFunction(Runnable function) {
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
final ScheduledFuture<?> producerHandle = scheduler.scheduleAtFixedRate(function, initialDelay, interval, MILLISECONDS);
scheduler.schedule(() -> { producerHandle.cancel(true); }, timeout, MILLISECONDS);
}
当我需要在调度模式下执行它的方法时,在其他类中使用它:
public void sendToKafka() {
Scheduler.scheduleFunction(this::produce);
}
这很好,除了一件事。 当主线程到达 sendToKafka() 时,它会调用调度器来调度一个函数。主线程继续运行,同时Scheduled函数开始工作。
预期结果: 当调度程序线程启动时,主线程停止并等待调度程序完成执行
我怎样才能做到这一点?
【问题讨论】:
标签: java multithreading scheduled-tasks