【问题标题】:Does not calling Future.get cause any issue?不调用 Future.get 会导致任何问题吗?
【发布时间】:2018-12-21 17:39:17
【问题描述】:

我正在执行某个流程,其中我将一些任务提交给 Callable 并将输出存储在 Future<> future 中。 在某些情况下,我不会调用future.get() 来检索值,也不会取消任务。这会导致任何问题吗?

【问题讨论】:

  • 没有问题,只是你不知道任务何时失败。
  • 你不会知道任务是否失败或任务的结果是什么。
  • 我没有得到未来值的情况我不需要知道任务的执行状态...

标签: java multithreading concurrency future callable


【解决方案1】:

在大多数情况下,当你不关心这个任务的执行结果时,它不会引起任何问题。

但是请注意future.get的这个特殊功能:

内存一致性效果:异步执行的操作 计算发生在相应的动作之后 Future.get() 在另一个线程中。

这是一个例子:

int i = 0;

如果你让

i = 1;

在任务中,在future.get之后再读i,它可以保证你得到新鲜值1

如果不调用future.get,您可能会得到过时的值0

【讨论】:

    【解决方案2】:

    我正在执行某个流程,其中我将一些任务提交给 Callable 并将输出存储在 Future<> 未来。在某些情况下,我不会调用future.get() 来检索值,也不会取消任务。这会导致任何问题吗?

    不,它不会引起任何问题。只要没有人持有对future 的引用,就会对future 进行垃圾回收。

    如果您不需要call() 方法的结果,显然您可以提交Runnable 而不是Callable,但在我看来,您想以编程方式选择忘记Callable这很好。

    【讨论】:

      猜你喜欢
      • 2013-04-04
      • 2014-04-05
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      相关资源
      最近更新 更多