在下面的代码中,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()
阻塞直到进程完成,因此您的代码示例将永远不会执行最后两行。如果删除最后一行,则应在输出中看到false。
我从互联网和oracle doc得到的答案是: -
首先: - 你可以创建一个运行无限次的程序,如qazxsw poi code.But java没有显示警告,破坏条件应该是他们的。
第二: - 假设你想创建一个while(true)
线程,然后使用该方法。
第三: - 如果你想在一定时间后终止使用另一种方法,请单击: -
system or daemon