Ste*_*all 3 concurrency groovy multithreading
我需要并行调用多个方法并等待结果.每个都依赖于不同的资源,因此它们可能会在不同的时间返回.我需要等到收到所有结果或在一段时间后超时.
我可以通过方法调用生成带有对共享对象的引用的线程,但有没有更好,更常规的方法来做到这一点?
目前的实施:
Executors exec = Executors.newFixedThreadPool(10);
for (obj in objects) {
def method = {
def result = new ResultObject(a: obj, b: obj.callSomeMethod())
result
} as Callable<ResultObject>
callables << method
}
List<Future<ResultObject>> results = exec.invokeAll(callables)
for (result in results) {
try{
def searchResult = result.get()
println 'result retrieved'
} catch (Exception e)
{
println 'exception'
e.printStackTrace()
}
}
}
Run Code Online (Sandbox Code Playgroud)
Groovier解决方案是使用GPars - 一个用Groovy编写的并发库.
import static groovyx.gpars.GParsExecutorsPool.withPool
withPool {
def callable = {obj -> new ResultObject(a: obj, b: obj.callSomeMethod())}.async()
List<ResultObject> results = objects.collect(callable)*.get()
}
Run Code Online (Sandbox Code Playgroud)