我需要执行一个线程,可以改变的间隔,并被另一个线程动态改变



我需要每隔一段时间执行一个可运行的实现,它可以不断变化,并由另一个线程调整。我可以使用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)

调度一个新的执行

最新更新