Я хочу, чтобы 3 потока работали параллельно и возвращали результаты параллельно, чтобы, когда задача вернула истину, когда она сгенерировала правильное число, все другие потоки перестали выполняться.
Я пытался используя CallableFuture и Callable с newFixedThreadPool , но, похоже, я получаю желаемый результат. Проблема в том, что каждый раз мне приходится ждать завершения всех результатов, но я просто хочу остановить все потоки, если один поток нашел случайное число, которое я ищу.
Вот следующий псевдокод :
public class GenerateRandomIntegerTask implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
// From constructor
int rand1 = rand1;
int rand2 = rand2;
// Do the work here
Rand rand = new Random();
int rand3 = random.nextInt(100);
if(rand1 + rand2 + rand3 == 5)
{
// STOP ALL TRHREADS
return true;
}
else
{
return false;
}
}
}
Я выполняю это с помощью newFixedThreadPool, например:
MultiValuedMap<Integer, Integer> randMap = randHelper.retrieveRandMap();
Iterator it = randMap.entries().iterator();
ExecutorService executor = Executors.newFixedThreadPool(3);
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
int rand1 = pair.getKey().toString();
String rand2 = pair.getValue().toString();
executor.submit(new GenerateRandomIntegerTask (rand1, rand2));
}
Кто-нибудь знает, как этого добиться?
И прежде, чем вы отметите это как дубликат, пожалуйста, найдите время, чтобы подумать, так ли это на самом деле, потому что я не встречал других вопросов, описывающих ту же самую проблему.