Java中的异步任务模式

时间:2011-02-28 14:34:13

标签: java multithreading asynchronous

我正在从C#转向Java,我需要实现一组异步任务。

我非常了解Java线程,但我喜欢.NET的BeginInvokeEndInvoke方法,因为它们允许我轻松地从同步切换到异步任务。

就我而言,如果我有一组I / O密集型操作(适合更改为异步),如下所示:

DoOperation1();
DoOperation2();
DoOperation3();
在.NET中,我很容易做到这样的事情:

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

简单地说,我的问题是:Java中是否有类似内容,或者我是否需要手动使用线程“旧方式”?

谢谢。

2 个答案:

答案 0 :(得分:12)

您可能希望在Java中使用期货。您将任务提交到ExecutorService并收到Future<T>后退,您可以通过与.NET 4 TPL中的Task<T>类似的方式查看...您可以询问未来它以阻塞的方式或超时的结果询问它是否已完成等。

使用Callable<T>并不像通过方法组转换和lambda表达式在C#中使用委托那样整洁,但基本思想是相似的。

答案 1 :(得分:4)

我认为您可能希望将ExecutorService与Runnable或Callable类一起使用,这些类包含您尝试运行的作业的实现。

一个例子:

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

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

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