不调用 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 就好了。