簡體   English   中英

ScheduledExecutorService - 檢查計划任務是否已完成

[英]ScheduledExecutorService - Check if scheduled task has already been completed

我有一個服務器端應用程序,客戶端可以請求重新加載配置。 如果客戶端請求重新加載配置,則不應立即執行此操作,但延遲時間為1分鍾。 如果另一個客戶端也請求在同一分鍾重新加載配置,則應忽略此請求。

我的想法是使用ScheduledExecutorService安排任務,如:

 ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
 service.schedule(new LoadConfigurationTask(), 1, TimeUnit.MINUTES);

 public class LoadConfigurationTask Runnable {
    public void run() {
      // LoadConfiguration
    }
 }

如何檢查LoadConfigurationTask是否已被調度但尚未執行,以便能夠忽略進一步的請求,直到重新加載配置為止?

您可以像這樣簡單地獲得對ScheduledFuture的引用:

ScheduledFuture<?> schedFuture = service.schedule(new LoadConfigurationTask(), 1, TimeUnit.MINUTES);

現在有了未來,您可以檢查任務是否完成:

schedFuture.isDone();

或者甚至更好,檢查執行開始前還剩多少時間:

schedFuture.getDelay(TimeUnit.MINUTES);

不需要外部變量來跟蹤狀態。

最簡單的方法就是設置AtomicBoolean http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html

在啟動任務時將其設置為true,在任務完成時將其設置為false,除非處於false狀態,否則不再啟動任務。

確保在finally塊中將設置設置為false,這樣您就不會在不取消設置的情況下意外退出。

暫無
暫無

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

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