不会调用Future.get引起任何问题吗?

时间:2018-07-13 10:50:25

标签: java multithreading concurrency future callable

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

2 个答案:

答案 0 :(得分:2)

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

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

  

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

这里是一个例子:

int i = 0;

如果愿意的话

i = 1;

在任务中,然后在i之后读取future.get,它可以确保您获得新鲜的价值1

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

答案 1 :(得分:1)

  

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

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

很明显,如果您不需要Runnable方法的结果,则可以提交Callable而不是call(),但对我来说,这听起来像是您希望以编程方式选择仅忘了Callable很好。