[英]ScheduledExecutorService not creating concurrent threads
我试图了解 ScheduledExecutorService 的工作原理。 我写了这个简单的测试:
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(10);
executorService.scheduleAtFixedRate(() -> {
try {
System.out.println("Test " + Thread.currentThread().getId());
Thread.sleep(10000);
System.out.println("End " + Thread.currentThread().getId());
} catch (Exception ex) {
}
}, 0, 100, TimeUnit.MILLISECONDS);
我在控制台上看到以下内容:
Test 19
End 19
Test 19
End 19
Test 21
End 21
等等。 执行者不应该在第一个线程结束之前就安排并启动一个新线程吗? 如果核心池大小为 10,为什么线程一个接一个地启动。10 个线程不应该一起运行吗?
重复任务是非重叠的,因此第一次调用需要在下一次调用开始之前完成:
通过 scheduleAtFixedRate 或 scheduleWithFixedDelay 安排的任务的连续执行不会重叠。 虽然不同的执行可能由不同的线程执行,但先前执行的效果发生在后续执行的效果之前。
如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会并发执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.