当其中一个 returns 不为空时,ExecutorService 关闭其他线程

ExecutorService shutdown other threads when one of them returns not null

我有 20 个话题。每个线程只对 MongoDB 进行 findOne 查询:

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

所以 findOne 将 return 找到文档的 null 之一。

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

有什么办法吗?

我尝试在 ExecutorService 中使用 invokeAny。但这是 return 完成 成功 的结果。在我的案例中,成功 的情况是 findOne return 找到文档而不是 null

注意:我的真实示例比 findOne 更复杂(这就是为什么我使用多线程,而不仅仅是顺序调用)

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