Мне нужно вызвать несколько методов параллельно и ждать результатов. Каждый полагается на разные ресурсы, поэтому они могут вернуться в разное время. Мне нужно подождать, пока я получу все результаты или тайм-аут после определенного периода времени.
Я мог бы просто создавать потоки со ссылкой на общий объект с помощью вызова метода, но есть ли лучший, более интересный способ сделать это?
Текущая реализация:
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()
}
}
}