在以下代码中,scheduleAtFixedRate无限运行。

所以问题是:

为什么Java提供了无限线程执行方案

Runnable task1 = () -> System.out.println("Hello Zoo");
Future<?> result = service1.scheduleAtFixedRate(task1, 8, 2, TimeUnit.SECONDS);
System.out.println(result.get());
System.out.println(result.isDone());

该程序从不打印result.get()的输出,该输出应为null或System.out.println(result.isDone()); ,其应为 0

所以我在调用 scheduleAtFixedRate 之后的观点应该是无法访问的。

最佳答案

scheduleAtFixedRate返回这样描述的Future:

...任务只会通过取消或终止执行程序来终止。

因此,调用其get方法将永远等待,因为:

Future.get()

等待必要的计算完成,然后检索其结果。

因此,您将永远等待Future.get()方法返回。

10-08 08:31