【问题标题】:How to know when ScheduledExecutorService is completed [duplicate]如何知道 ScheduledExecutorService 何时完成 [重复]
【发布时间】:2014-12-01 14:34:31
【问题描述】:

对不起,我有点困惑,但我有点困惑,需要一些并发方面的帮助。

如果我在一个类中有一个线程池,它每 10 秒计算一次值,例如这样

private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
executorService.schedule(callable, 10, TimeUnit.SECONDS);

我如何确定结果何时返回。结果准备好后,我需要处理地图并进行一些计算,然后删除/清空地图

我能想到的唯一方法是使用 Observable 界面,但我猜这不是正确的方法

谢谢

【问题讨论】:

  • 为什么不在计划任务中启动后续操作?那将是最自然的方法。
  • 看看schedule()方法的返回类型?
  • 它返回一个预定的未来 但是 - 这基本上不会运行一次,它会随着数字的变化而连续运行,所以我只需要继续检查预定的 future.isdone环形?一旦完成是真的我有一个新的结果?

标签: java multithreading concurrency


【解决方案1】:

您可以像这样使用ScheduledFuture 并调用isDone(因为ScheduledFuture 扩展了Future)

ScheduledFuture schedule = executorService.schedule(callable, 10, TimeUnit.SECONDS);
schedule.isDone()

【讨论】:

  • 您好,我在顶部添加了一条评论,其中的问题已经完成了一点。谢谢
  • @Biscuit128 所以你想在 isDone() 返回 true 时调用/执行多个操作?
  • 基本上这是一个彩票游戏,但是当它完成后,数字会每隔 x 秒不断变化我需要检查谁中奖了
  • 你看过 FutureWatcher 实用程序gist.github.com/samhendley/6030565
猜你喜欢
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 2013-02-01
  • 2011-04-05
  • 2021-04-25
相关资源
最近更新 更多