我需要每隔一段时间执行一个可运行的实现,它可以不断变化,并由另一个线程调整。我可以使用scheduleexecutorservice和ScheduleWithFixedDelay实现这一点吗?将这样做:
ThreadScheduler = backgroundExecutors.scheduleWithFixedDelay(refreshFunc, 5, refreshRate, TimeUnit.SECONDS);
检查变量refreshRate的值并相应地调整?
我不想通过这样的变量将线程置于睡眠状态:
Thread.sleep(variable);
我将感谢任何人谁可以提供一些有用的信息在这里。
编辑:我把我的问题改写一下。如果我必须更改与scheduleWithFixedDelay关联的时间间隔,当任务执行是进度时是否可能?
编辑2:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
ScheduledFuture scheduledFuture;
Runnable foo = new Runnable() {
public void run() {
doSomething();
}
}
while (true) {
scheduledFuture = scheduledExecutorService.schedule(foo, refreshRate, TimeUnit.SECONDS);
scheduleFuture.cancel();
}
请注意,refreshRate一直在变化。这能行吗?
编辑3:
ScheduledExecutorService scheduleExecutorService = Executors.newScheduledThreadPool(5);
ScheduleFuture scheduledFuture;
Runnable foo = new Runnable() {
public void run() {
doSomething();
}
scheduledFuture.cancel():
scheduleFuture = scheduledExecutorService.schedule(foo, refreshRate, TimeUnit.SECONDS);
}
scheduleFuture = scheduledExecutorService.schedule(foo, refreshRate, TimeUnit.SECONDS);
enter code here
这就是你的建议吗?
scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
,顾名思义,为您提供了执行之间的固定延迟。执行间隔由参数delay
固定。一旦调度,就不可能更改调度参数。您需要取消scheduledFuture
并发出一个新命令。
如果运行之间的调度时间是可变的,那么一个选项是在作业运行结束时读取下一次执行时间,并让它使用schedule(Runnable command, long newDelay, TimeUnit unit)