簡體   English   中英

Java調度線程池執行程序在某些條件上具有初始延遲檢查某些值

[英]Java scheduled thread pool executor with initial delay on some condition check on some value

問題:

我有一個任務,必須在每個任務運行后以固定的延遲定期運行。 此外,我有一個條件,在初始延遲或第一次執行應在條件滿足后發生。 因此執行程序必須阻止調度任務,直到條件滿足為止。

Java Concurrent包為我們提供了ScheduledThreadPoolExecutor,它具有初始延遲時間的選項。 但在我的情況下,初始延遲是在一些條件或值改變到所需的條件之后。

我如何實現此行為以及我應該使用哪些executorservice或者我可以覆蓋執行程序服務中的哪些方法來實現上述行為。

我不希望僅在條件滿足后才開始創建ScheduledThreadPoolExecutor對象,原因是我們的應用程序中存在大量此類定期計划任務,並且如果下次添加任何新任務並且如果他們忘記了在進行檢查的代碼部分中添加,然后將立即安排它,而不進行任何條件檢查。 為了避免它,我想要一個執行器服務,它將為我處理它,並且下次使用此執行器服務的任何人將默認免費獲得此行為。

任何幫助表示贊賞。

謝謝

我認為您不會找到現成的ExecutorService來處理您的用例。 那么為什么不嘗試這樣,創建擴展ScheduledThreadPoolExecutor的自定義類,在那里你覆蓋beforeExecute方法,在這里你編寫代碼來檢查第一次執行(有自定義標志來檢查它是否是第一次執行)而不是其他調用它將執行正常的runnable對象。 類似下面的代碼:

import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TestClass extends ScheduledThreadPoolExecutor {

public TestClass(int corePoolSize) {
    super(corePoolSize);
}

@Override
protected void beforeExecute(Thread t, Runnable r) {
    super.beforeExecute(t, r);
}

@Override
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) {
    return super.schedule(command, initialDelay, TimeUnit.MILLISECONDS);
}
}

如何提前創建執行程序,但只有在滿足條件后才執行預先存在的執行程序的任務調度操作,並且您已經知道了所需的初始延遲。

暫無
暫無

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

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