Java-以不同的时间间隔运行任务

问题描述 投票:1回答:1

此问题是针对大学作业。我想每n * 2秒运行一次代码块(例如,等待1秒,然后运行,然后等待2秒,然后运行,再等待4秒,然后运行,等等),最多5次。

我目前有这样的东西。

int timer = 1000;
int tryCounter = 0;

while( !condition()  && counter < 5){
  doTask();
  Thread.sleep(timer);
  timer *= 2;
  counter++;
}

尽管可以,但是我的成绩得益于不使用Thread.sleep()。我发现使用固定汇率的ScheduledThreadPoolExecutor是一种方法,但由于间隔实际上并未固定,因此我无法使其正常工作。

这是针对具有高并发功能的理论上的分布式系统,因此重要的是高可伸缩性。

如果通过写在报告上确实没有任何好处或可行的方法,我可以摆脱Thread.sleep()。有人对此有见识吗?

java executorservice threadpoolexecutor thread-sleep scheduledexecutorservice
1个回答
0
投票

可以通过ScheduledExecutorService结合一些逻辑来安排任务。 .schedule参数使您可以指定要使用的时间单位。您可以声明一个变量,该变量可以处理您要执行的增量。

int timer = 1000;
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
    Runnable runnable = new Runnable() {
        public void run()
        {
           //Move your code you want to implement here
        }
    };
    //Increment your variable
    while(!condition()) {
        for(int i = 0; i < 5; i++) {
            service.schedule(runnable, timer, TimeUnit.SECOND);
            timer *= 2;
        }
    }

在可运行块中移动代码执行,然后在for循环中对其进行调度,在该循环中递增计时器,这将达到您想要的效果。希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.