Посмотрите на цикл:
for (VehicleSimView vehicle : vinToVehicles.values()) {
future = executor.submit(new CanSpawnThread(vehicle, noVehicleZone));
if(!future.get()){
return false;
}
}
Вы отправляете исполнителю, а затем ждете завершения будущего, прежде чем продолжить и отправлять следующий.Это все еще просто последовательный цикл.
Отправьте все ваши вызовы исполнителю, сохраните Future
s в списке, а затем проверьте элементы списка, чтобы увидеть, завершены ли они.
Или, лучше, используйте CompletionService
, который вернет вам фьючерсы в порядке их завершения.Как только вы найдете Future, который возвращает false, отмените все остальные и вернитесь.