2011-02-28 49 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