У меня есть метод async, как показано ниже, который вызывает мой класс Task и мой класс Task выполняет всю работу.Как вызвать метод параллельно, который возвращает будущее?
@Override
public Future<DataResponse> executeAsync(DataKey key) {
Future<DataResponse> future = null;
try {
Task task = new Task(key, restTemplate);
future = executor.submit(task);
} catch (Exception ex) {
// logging exception here
}
return future;
}
Ниже мой Task
класс, который делает всю работу:
public class Task implements Callable<DataResponse> {
private DataKey key;
private RestTemplate restTemplate;
public Task(DataKey key, RestTemplate restTemplate) {
this.key = key;
this.restTemplate = restTemplate;
}
@Override
public DataResponse call() throws Exception {
// some code here
}
}
Теперь мне нужно вызвать метод executeAsync
параллельно, а затем сделать List<DataResponse>
объект и вернуть его.
@Override
public List<DataResponse> executeSync(DataKey key) {
List<DataResponse> responseList = new ArrayList<DataResponse>();
// make a List of DataKey using single key passed to this method.
List<DataKey> keys = new ArrayList<DataKey>();
for(DataKey key : keys) {
}
}
Как я могу назвать executeAsync
метод параллельно и вернуться обратно responseList
? В моем keys
списке максимум у меня будет шесть объектов DataKey
.
Итак, в этом примере предположим, что у меня есть 3 фьючерса, а затем мы повторяем их в цикле, в блоке try он будет вызывать future.get для первого будущего, а затем он будет ждать, как только это будет завершено, оно вызовет второе второе будущее? – john
Есть ли способ вызвать сразу все методы получения фьючерсов? Я все еще на Java 7. – john
Правильно. 'get' - это блокирующий вызов. 'CompletionService' делает это немного лучше. _call их всех сразу_ будет решением akki, но вы должны изменить некоторые вещи в своем коде, и это фактически делает то же самое внутри. –