小天管理 发表于 2024年9月25日 发表于 2024年9月25日 主线程去调用 10 个子线程查询任务(返回 true/false), 在回调中统计结果, 我想在得到两个 true 时主线程立即返回 true, 不管其他的子线程时已提交到线程池还是未提交到线程池, 都不需要了 我尝试了CompletableFuture#cancel, 和Executor#shutDownNow方法, 都没达到效果 ThreadPoolExecutor executor = newFixedThreadFool(10); List<CompletableFuture<Boolean> list = ... //10 个任务, 都提交到 executor AtomicInteger i = 0; list.forEach(cf- cf.thenAccept(b-> if(b && i.incrementAndGet >= 2 ){ //让主线程停止阻塞立即返回, 尝试下面两个方案都不行 executor.shutDownNow(); list.forEach(f->f.cancel(true)); } )) // 希望通过某种方式让此处停止阻塞 CompletableFuture.allOf(list.toArray).join() return i.get()>=2; 目前的方案是把后续流程放在了子线程回调中, 加锁处理, 主线程不要返回值了, 应该是可行的, 但是还是想请问大家, 原来的"主线程提前返回"的想法能否实现?
已推荐帖子