Когда мы называем invokeAll()
метод, который он возвращает List<Futute<T>>
объект. И этот объект Future
сохраняет значение всех потоков, пока он не будет успешно выполнен. Итак, когда мы пытаемся выполнить итерацию через Future<T>
объект, он сначала проверяет внутри себя Future<T>.isDone()
[Мы можем или не можем проверить Future<T>.isDone()
извне]. Если он вернет true, мы можем выполнить итерацию по объекту и получить доступ к значению объекта Future<T>
, иначе он будет ожидать true.
Примечание: если Future<T>
получает ложный объект, он не позволит вам выполнять итерацию по объекту.
ExecutorService threader = Executors.newFixedThreadPool(queue.size());
List<Future<T>> listFuture = threader.invokeAll(queue);
for(Future<T> future: listFuture) {
// Here you have the full access to this future object
}