java线程之间的通信:当一个线程完成其任务时停止所有线程

sha*_*fax 7 java multithreading

我有n个并行运行的线程,每个线程都有一些自定义逻辑.但是,我的要求是当任何线程完成执行时,所有其他线程应该停止执行并返回.

实现这个的最佳方法是什么?我想通过拥有一个共享的布尔变量来做到这一点.当任何线程完成执行时,它将设置布尔值.所有线程都定期读取此变量,并在设置时退出.

此外,我的自定义逻辑是一个无限循环,一旦我知道其他一些线程已经完成执行,我想在当前迭代后停止执行.

这样做的正确方法是什么?

fge*_*fge 8

使用an ExecutorService及其.invokeAny()方法(注意:还有一个带超时的版本).

来自Javadoc:

执行给定的任务,返回已成功完成的任务的结果(即,不抛出异常),如果有的话.

一个你有你的结果,.shutdown()执行者.

请参阅Executors课程以获得符合您需求的执行者.

另一个解决方案是ExecutorCompletionService班级; 在这种情况下,你.take()不是.invokeAny(),而是必须逐个提交每个任务.而且你还必须保留对你的引用,ExecutorService因为你需要一个作为参数,并且还需要关闭它.

(注意:如果你没有返回结果,请创建实例)Callable<Void>