Java - 运行 不同时间间隔的任务
Java - Run tasks in varying time intervals
这个问题是关于大学作业的。
我想每 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 循环中应该可以实现您想要的效果。希望有帮助!
这个问题是关于大学作业的。
我想每 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 循环中应该可以实现您想要的效果。希望有帮助!