Я хотел бы запретить исполнителю запускать какие-либо объекты Future, даже если они были отправлены исполнителю. Запуск нескольких потоков через Executor работает нормально, но Executor должен остановиться, когда один из Callable возвращает логическое значение TRUE. Хорошо, что текущая запущенная версия Future завершена, но продолжать остальное было бы пустой тратой времени.
Set<Future<Boolean>> calculationSet = new HashSet<Future<Boolean>>();
threadPool = Executors.newFixedThreadPool(3);
int x = nextX();
int y = nextY();
do {
Callable<Boolean> mathCalculation = new MathCalculation(x, y);
Future<Boolean> futureAttempt = threadPool.submit(mathCalculation);
calculationSet.add(futureAttempt);
x = nextX();
y = nextY();
} while (runSomeMore());
Где MathCalculation реализует интерфейс Callable, а его метод call() возвращает логическое значение.
Поиск по набору вычислений на каждой итерации невозможен, поскольку набор станет довольно большим и, очевидно, не будет работать из-за многопоточной ситуации. Есть ли способ добиться этого?