我想阻止 Executor 运行任何更多 Future 对象,即使它们已提交给 Executor。通过 Executor 让多个线程运行都可以正常工作,但是当 Callable 之一返回 Boolean TRUE 时,Executor 应该停止。当前正在运行的 Future 完成很好,但继续其余部分将是浪费时间。
Set<Future<Boolean>> calculationSet = new HashSet<Future<Boolean>>();
threadPool = Executors.newFixedThreadPool(3);
int x = nextX();
int y = nextY();
do {
Callable<Boolean> mathCalculation = new MathCalculation(x, y);
Future<Boolean> futureAttempt = threadPool.submit(mathCalculation);
calculationSet.add(futureAttempt);
x = nextX();
y = nextY();
} while (runSomeMore());
其中 MathCalculation 实现了 Callable 接口,其 call() 方法返回一个布尔值。
在每次迭代时搜索calculationSet 不是一个选项,因为该集合会变得非常大,并且由于多线程情况,它显然无法工作。有没有办法做到这一点?