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