gpt4 book ai didi

Java8 ScheduledExecutorService.scheduleAtFixedRate()

转载 作者:行者123 更新时间:2023-11-30 06:41:05 29 4
gpt4 key购买 nike

我正在阅读一本 java8 书籍,发现了 ScheduleAtFixedRateScheduledExecutorService 中的 scheduleWithFixedDelay 方法之间的区别。

我在书上了解这两种方法之间的区别,但是当我尝试编写一个简单的代码时。尚不清楚为什么 scheduleAtFixedRate同步

如您所见,我在池中分配了 100 个线程。调度器每 1 毫秒提交一个新任务,每个任务有 1 秒的延迟。

    ScheduledExecutorService s = Executors.newScheduledThreadPool(100);
s.scheduleAtFixedRate(() -> {
int num = new Random().nextInt(100);
System.out.println("Hello World" + num);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Finished" + num);
}, 0, 1, TimeUnit.MILLISECONDS);

但为什么我会得到这个输出?一个新任务只会在另一个任务之后运行。

Hello World94
Finished94
Hello World14
Finished14
Hello World90
Finished90
Hello World26
Finished26

最佳答案

查看 ScheduledThreadPoolExecutor#scheduleAtFixedRate 的 javadoc

If any execution of this task takes longer than its period, then subsequent executions may start late, but will not concurrently execute.

所以不要等待它并发执行,它总是顺序执行..

关于Java8 ScheduledExecutorService.scheduleAtFixedRate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56315400/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com