2014-01-29 136 views
3

我有一個服務器端應用程序,客戶端可以請求重新加載配置。如果客戶端請求重新加載配置,則不應立即執行此操作,但會延遲1分鐘。如果另一個客戶端也請求在同一分鐘內重新加載配置,則該請求應該被忽略。ScheduledExecutorService - 檢查計劃任務是否已完成

我的想法是安排任務與像一個ScheduledExecutorService的:

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

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

如何檢查是否LoadConfigurationTask已定,但尚未執行,才能夠忽略進一步請求,直到配置重新加載?

+0

如果重新加載配置任務正在運行 - 如果另一個請求也被忽略,該怎麼辦?如果任務在1毫秒前完成,該怎麼辦? –

+0

沒有,如果它正在運行,應該安排新的任務 – markus

回答

25

你可以簡單地得到這樣的ScheduledFuture一個參考:

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

現在,您可以檢查任務完成:

schedFuture.isDone(); 

甚至更​​好,檢查有在執行開始之前剩下很多時間:

schedFuture.getDelay(TimeUnit.MINUTES); 

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

+3

這應該是被接受的答案。 – UniversE

相關問題