Java8 ScheduledExecutorService.scheduleAtFixedRate

我正在读一本 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 World94

Finished94

Hello World14

Finished14

Hello World90

Finished90

Hello World26

Finished26


喵喔喔
浏览 115回答 1
1回答

慕丝7291255

看一下 javadocScheduledThreadPoolExecutor#scheduleAtFixedRate如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。所以不要等待它并发执行,它总是顺序执行..
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java