我希望有3个线程并行运行,并并行返回结果,这样,当一个任务在生成正确的数字时返回true时,所有其他线程都会停止执行。
我曾尝试使用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;
}
}
}
我使用一个新的FixedThreadPool执行此操作,如下所示:
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));
}
有人知道如何做到这一点吗?
在你把它标记为重复之前,请花一些时间考虑一下它是否真的是,因为我还没有看到其他问题描述这个完全相同的问题。
@mihael Keehl,我认为您需要使用的是一个"CountDownLatch";它将充当一个门,以确保配置数量的线程(可使用其构造函数初始化(将在控制传递到主线程中的下一行代码之前完成它们的执行。释放闩锁后,您将能够检查线程的状态并中断仍在运行的线程。如果您需要特定的代码示例,请告诉我-我可以提供帮助。