【发布时间】:2020-05-14 16:45:59
【问题描述】:
我只是在探索 Java 中 ScheduledExecutorService 类的方法 scheduleAtFixedRate。
这是我的可疑代码:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
Runnable command = () -> {
System.out.println("Yo");
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
scheduledExecutorService.scheduleAtFixedRate(command, 0, 1, TimeUnit.SECONDS);
我预计每 1 秒 scheduleExecutorService 将尝试从池中获取新线程并启动它。
API 说:“scheduledExecutorService 创建并执行一个周期性操作,该操作首先在给定的初始延迟后启用,然后在给定的时间段内启用。/(不重要的已删除)/ 如果执行此任务花费的时间比它的周期长,那么后续的执行可能会延迟开始,但不会同时执行。”
结果 - 每个新线程每 4 秒启动一次。
所以,问题:
有什么问题 - Thread.sleep() 是否会停止所有线程或此行为的细微差别 - “如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行“?
如果在这种情况下“不会同时执行”为真 - 如果每个线程都将在前一个线程执行后启动,为什么我们需要这个由多个线程组成的池?
是否有任何简单有效的 scheduleAtFixedRate 使用示例,其中一个线程启动而前一个线程仍在执行?
【问题讨论】:
-
您的问题 1 不清楚。你在问什么?
-
2.因为您可以在该执行程序中安排多个任务。另外,因为这就是这个特定时间表的定义方式。
-
@AnkurChrungoo,我的意思是“睡眠”方法中的问题,或者就像文档说线程不会并发?现在我得到了答案,谢谢
标签: java multithreading