微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以一定间隔启动线程scheduleAtFixedRatetask,1,2,TimeUnit.SECONDS-SheduledExecutorService

如何解决以一定间隔启动线程scheduleAtFixedRatetask,1,2,TimeUnit.SECONDS-SheduledExecutorService

有这样的示例代码

public class ExecutorsRunnableRun {
    public static void main(String[] args) {
        scheduledexecutorservice scheduledexecutorservice =
                Executors.newScheduledThreadPool(4);
        IntStream.range(0,7).forEach(
                i ->  {
                    Task task = new Task(i);
                    scheduledexecutorservice.scheduleAtFixedrate(task,1,2,TimeUnit.SECONDS);
                }
        );
        scheduledexecutorservice.shutdown();
        try {
            scheduledexecutorservice.awaitTermination(1000,TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printstacktrace();
        }
    }
    private static class Task implements Runnable {
       private final int idThread;
        private Task(int idThread) {
            this.idThread = idThread;
        }
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() +
                    ":  is launched in iteration  № " + this.idThread);
        }
    }

我想看到一个线程将延迟一秒钟运行(相对于我们为线程指向任务的那一刻,但现在我们并不会在一段时间内运行它)

然后,线程必须执行任务,但要持续2秒钟。

线程必须执行14次任务,同时线程将重用线程池中的那些线程。

是吗?

scheduleAtFixedrate(task,TimeUnit.SECONDS)

据我了解,应用程序启动后,第一个线程不会立即启动,而是在1秒后启动,然后执行任务。

相同的任务将在2秒内再次完成。

然后,在下一次迭代中,重复该算法。

因此,对于每次迭代,每个线程将完成任务-2次。

是吗?

但是线程没有时间运行,应用程序停止了。

为什么?

为了了解这种机制的工作原理,我不得不延迟创建任务。

        IntStream.range(0,7).forEach(
                i ->  {
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printstacktrace();
                    }
                    Task task = new Task(i);
                    scheduledexecutorservice.scheduleAtFixedrate(task,TimeUnit.SECONDS);
                }
        );

然后我看不到这样的计划者要点。

谁知道,请解释这种机制。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。