当给出 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 中指定实现的)。
我对未来和多线程还是陌生的。我有一个流程是这样的:
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 中指定实现的)。