当给出 Future 然后 Thread 被取消或终止时会发生什么?

What happens when Future is given then Thread is cancelled or killed?

我对未来和多线程还是陌生的。我有一个流程是这样的:

callable A 是队列 C 的发布者,线程 B 是队列 C 的消费者。队列 C 将期望来自 A 的 Futures,以便 B 可以继续计算。 A 的执行者会将未来传递到队列 C 中,线程 B 将使用 future.get() 并在继续之前等待结果。

我想知道如果可调用 A 失败并且 B 仍在监听未来,会发生什么?如果 B 线程需要更长的时间才能完成,并且 A returns 的值更早,但仍在队列 C 中,会发生什么?

Future.get() 的 javadoc 告诉:

Waits if necessary for the computation to complete, and then retrieves its result.

假设序列如下:

  • A 将 Future 对象 X 放入队列 C
  • A 完成了 X 的计算
  • B 从队列 C 中检索 X

当 B 现在调用 X.get() 时,计算结果无阻塞地返回(如果 X 是在 javadoc 中指定实现的)。