为了账号安全,请及时绑定邮箱和手机立即绑定

Java8 ScheduledExecutorService.scheduleAtFixedRate

Java8 ScheduledExecutorService.scheduleAtFixedRate

喵喔喔 2022-12-15 16:18:48
我正在读一本 java8 的书,scheduleAtFixedRate发现.scheduleWithFixedDelayScheduledExecutorService我在书上了解这两种方法之间的区别,但是当我尝试编写一个简单的代码时。目前还不太清楚为什么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 World94Finished94Hello World14Finished14Hello World90Finished90Hello World26Finished26
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

看一下 javadocScheduledThreadPoolExecutor#scheduleAtFixedRate

如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。

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


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号