我有一个任务,我想运行延迟会不断变化(即 - 没有固定间隔(。
我想要一个线程和无限循环,找到延迟值,将其输入执行器,然后在该任务完成后找到新的延迟值等。
我目前的"基本"实现:
long targetTime = findNextTime()/1000;
long currentTime = System.curentTimeMillis()/1000;
delay = targetTime - currentTime;
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3);
Runnable task = new Runnable() {
public void run() {
System.out.println("Test Task");
ScheduledFuture<?> future = scheduler.schedule(this, delay, TimeUnit.SECONDS);
}
}
如何让它找到新的延迟并继续重复此任务?
我应该轮询要完成future
然后执行递归循环吗?我试这个,但出现错误。
有一些答案可以解决这个问题。在计划执行器服务中重新初始化修复延迟,并如何在运行时更改 Spring 的@Scheduled固定延迟
这里我支持另一种实现这种重复提交任务的方法ExecutorService
class Task implements Runnable {
private static Random random = new Random();
private ExecutorService executor;
public Task(ExecutorService executor) {
this.executor = executor;
}
@Override
public void run() {
try {
System.out.println(System.currentTimeMillis() + " Hello World");
TimeUnit.MILLISECONDS.sleep(random.nextInt() % 100);
executor.execute(this);
} catch (Exception e) {
}
}
}