2011-02-28 51 views
10

我從C#移動到Java,我需要實現一組異步任務。異步任務模式在Java中

我對Java線程有很好的瞭解,但我喜歡.NET的BeginInvokeEndInvoke方法,因爲它們允許我輕鬆地從同步任務切換到異步任務。

對我來說,如果我有一組I/O密集型操作(適用於更改爲異步)像下面這樣:

DoOperation1(); 
DoOperation2(); 
DoOperation3(); 

在.NET我很容易做這樣的事情:

BeginInvoke(DoOperation1); 
BeginInvoke(DoOperation2); 
BeginInvoke(DoOperation3); 
EndInvoke(Result1); 
EndInvoke(Result2); 
EndInvoke(Result3); 

簡單地說,我的問題是:有什麼用Java類似,或者我需要手動使用線程「老辦法」?

謝謝。

回答

12

你可能想在Java中使用期貨。您提交任務的ExecutorService並接收Future<T>回來,你可以以類似的方式從.NET 4 TPL要求以Task<T> ...你可以要求它的結果,在未來,阻塞的方式,或超時,詢問是否完成等等。

Callable<T>一起使用並不像在C#中通過方法組轉換和lambda表達式使用代理那麼簡單,但基本思想是相似的。

4

我想你可能會想使用ExecutorService一起Runnable或贖回類,包你想運行的作業的執行情況。

一個例子:

SomeTask someTask1 = ... 
SomeTask someTask2 = ... 

executorService.execute(someTask1); 
executorService.execute(someTask2); 

executorService.shutdown(); //Close down the service