并行运行任务,并在收到特定结果后取消线程



我希望有3个线程并行运行,并并行返回结果,这样,当一个任务在生成正确的数字时返回true时,所有其他线程都会停止执行。

我曾尝试使用CallableFutureCallablenewFixedThreadPool,但我似乎得到了所需的结果。每次的问题是,我必须等待所有结果完成,但如果一个线程找到了我要找的随机数,我只想停止所有线程。

以下是伪代码:

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";它将充当一个门,以确保配置数量的线程(可使用其构造函数初始化(将在控制传递到主线程中的下一行代码之前完成它们的执行。释放闩锁后,您将能够检查线程的状态并中断仍在运行的线程。如果您需要特定的代码示例,请告诉我-我可以提供帮助。

相关内容

  • 没有找到相关文章

最新更新