簡體   English   中英

ScheduledExecutorService反復更改延遲

[英]ScheduledExecutorService change delay repeatedly

我有一個我想要運行的任務,延遲將不斷變化(即 - 沒有固定的間隔)。

我想要一個線程並無限循環找到延遲值,將其輸入到執行程序中,然后一旦完成該任務,找到新的延遲值等。

我目前的“基本”實施:

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完成,然后進行遞歸循環嗎? 我試試這個,我得到一個錯誤。

有一些答案可以解決這個問題。 重新初始化ScheduledExecutorService中的修復延遲以及如何在運行時更改Spring的@Scheduled fixedDelay

在這里,我支持另一種方法來實現對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) {

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM