我正在从C#转向Java,我需要实现一组异步任务。
我非常了解Java线程,但我喜欢.NET的BeginInvoke
和EndInvoke
方法,因为它们允许我轻松地从同步切换到异步任务。
就我而言,如果我有一组I / O密集型操作(适合更改为异步),如下所示:
DoOperation1();
DoOperation2();
DoOperation3();
在.NET中,我很容易做到这样的事情:
BeginInvoke(DoOperation1);
BeginInvoke(DoOperation2);
BeginInvoke(DoOperation3);
EndInvoke(Result1);
EndInvoke(Result2);
EndInvoke(Result3);
简单地说,我的问题是:Java中是否有类似内容,或者我是否需要手动使用线程“旧方式”?
谢谢。
答案 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