计划执行程序服务更改延迟重复



我有一个任务,我想运行延迟会不断变化(即 - 没有固定间隔(。

我想要一个线程和无限循环,找到延迟值,将其输入执行器,然后在该任务完成后找到新的延迟值等。

我目前的"基本"实现:

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) {
        }
    }
}

最新更新