Java 如果放弃对未来的引用,它还会运行吗?

Java 如果放弃对未来的引用,它还会运行吗?,java,future,Java,Future,在我的方法中,我必须调用另一个返回未来的方法(AnotherMethod) 例如 私有静态void myMethod(){ 未来mjObj=一种热方法(); 返回; } 实际上,我并不关心AnotherMethod返回的值(例如myObj的值),但我确实希望AnotherMethod完全运行 如果我放弃对未来的引用(如上例所示),那么AnotherMethod是否仍将完成运行 我知道在从myMethod返回之前,它不会完成,但即使不再引用myObj,它是否仍会在某个时刻完成?首先,由于您调用了

在我的方法中,我必须调用另一个返回未来的方法(
AnotherMethod

例如

私有静态void myMethod(){
未来mjObj=一种热方法();
返回;
}
实际上,我并不关心
AnotherMethod
返回的值(例如
myObj
的值),但我确实希望
AnotherMethod
完全运行

如果我放弃对未来的引用(如上例所示),那么
AnotherMethod
是否仍将完成运行


我知道在从
myMethod
返回之前,它不会完成,但即使不再引用
myObj
,它是否仍会在某个时刻完成?

首先,由于您调用了它,所以始终会执行另一种方法。至于并发性,如果AnotherMethod启动线程或将任务提交给执行者,则此并发执行不会被中断。垃圾收集器不会中断线程,因为它们是JVM中的顶级对象GC根。

不能保证将来会运行。但是如果你创建了它,比如说,通过一个执行器,那么执行器仍然有一个对它的引用。实际上,这取决于
AnotherMethod()
所做的事情,仅仅创建一个未来并不会运行它(就像
newfuture()
——这只是一个无聊的对象)。另一方面,如果该方法将某个任务发送给
执行者
,则该任务将被任务队列引用并最终执行。该任务可能重复
private static void myMethod() {
    Future<MyObj> mjObj = AnotherMethod();
    return;
}