2012-11-13 97 views
0

Java:有沒有辦法將偵聽器添加到Executor? 我有一個集合Future我試圖監視,以更新一些GUI狀態。目前我正在檢查後臺線程,如果提交/完成的任務存在差異,但我在while(true){}塊中執行此操作,我不喜歡這種方法。有沒有辦法給Executor/Future添加一個監聽器?

+1

否;這是Java中最愚蠢的部分之一。 – SLaks

+0

您使用的是什麼GUI工具包? – Puce

+1

@Puce:這與GUI無關。 – SLaks

回答

2

不幸的是,沒有辦法做到這一點。

而是使用Google的ListenableFuture<V> interface
或者,使用具有更好異步支持的語言,例如C#和TPL。

+0

此接口需要實現... –

+0

@AlexeiKaigorodov:請參閱文檔。請參閱http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util/concurrent/ListeningExecutorService.html – SLaks

1

如果您想在任務完成時執行某些操作,請將其添加到任務本身。

public static <T> void addTask(Callable<T> tCall) { 
    executor.submit(new Runnable() { 
     public void run() { 
      T t = tCall.call(); 
      // what you want done when the task completes. 
      process(t); 
     } 
    }); 
} 
2

根據您的GUI工具包,您可以使用SwingWorkers或類似的類來在任務完成時得到通知。

+0

with propertychangelistener – mKorbel

1

使用java.util.concurrent.ExecutorCompletionService而不是Executor來提交任務。它有方法take()返回最近完成的任務。啓動額外的線程(或SwingWorker),它將在循環中調用take(),並用結果更新GUI狀態。

相關問題