此问题是针对大学作业。我想每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()
。有人对此有见识吗?
可以通过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循环中对其进行调度,在该循环中递增计时器,这将达到您想要的效果。希望有帮助!