不调用 Future.get 会导致任何问题吗?
Does not calling Future.get cause any issue?
我正在执行某个流程,其中我将一些任务提交给 Callable 并将输出存储在 Future<> future
中。
在某些情况下,我不会调用 future.get()
来检索值,也不会取消任务。这会导致任何问题吗?
大多数情况下,当你不关心这个任务的执行结果时,不会造成任何问题。
但是请注意future.get
的这个特殊功能:
Memory consistency effects: Actions taken by the asynchronous
computation happen-before actions following the corresponding
Future.get() in another thread.
这是一个例子:
int i = 0;
如果你让
i = 1;
在任务中,然后在future.get
之后读取i
,可以保证得到新鲜的值1
。
如果不调用 future.get
,您可能会得到过时的值 0
。
I am executing a certain flow wherein I submit some task to Callable
and store the output in Future<>
future. In some of the cases I am not calling future.get()
to retrieve the value nor am I cancelling the task. Can this cause any issue?
不,它不会引起任何问题。只要没有人持有对 future
的引用,它就会被垃圾回收。
显然,如果您不需要 call()
方法的结果,您可以提交 Runnable
而不是 Callable
,但在我看来您想要以编程方式选择忘记 Callable
就好了。
我正在执行某个流程,其中我将一些任务提交给 Callable 并将输出存储在 Future<> future
中。
在某些情况下,我不会调用 future.get()
来检索值,也不会取消任务。这会导致任何问题吗?
大多数情况下,当你不关心这个任务的执行结果时,不会造成任何问题。
但是请注意future.get
的这个特殊功能:
Memory consistency effects: Actions taken by the asynchronous computation happen-before actions following the corresponding Future.get() in another thread.
这是一个例子:
int i = 0;
如果你让
i = 1;
在任务中,然后在future.get
之后读取i
,可以保证得到新鲜的值1
。
如果不调用 future.get
,您可能会得到过时的值 0
。
I am executing a certain flow wherein I submit some task to
Callable
and store the output inFuture<>
future. In some of the cases I am not callingfuture.get()
to retrieve the value nor am I cancelling the task. Can this cause any issue?
不,它不会引起任何问题。只要没有人持有对 future
的引用,它就会被垃圾回收。
显然,如果您不需要 call()
方法的结果,您可以提交 Runnable
而不是 Callable
,但在我看来您想要以编程方式选择忘记 Callable
就好了。