当其中一个返回非null时,ExecutorService关闭其他线程

时间:2017-06-07 18:59:54

标签: java multithreading executorservice

我喜欢20个帖子。每个线程只对findOne进行MongoDB查询:

db.myCollection.findOne({"queryKey" : "queryValue"})

因此findOne将返回找到的文档的null

每当其中一个线程返回找到的文档而不是null时,我想关闭其他线程。

有没有办法做到这一点?

我尝试在ExecutorService中使用invokeAny。但它返回的结果是 成功 。在我的情况下, 成功 的情况是findOne返回找到的文档而不是null

注意:我的真实例子比findOne更复杂(这就是我使用多线程而不仅仅是顺序调用的原因)

1 个答案:

答案 0 :(得分:2)

根据invokeAny的定义,返回第一个成功的结果。要在用例包装findOne中使其工作,并在null时抛出异常,使其不成功。