sha*_*fax 7 java multithreading
我有n个并行运行的线程,每个线程都有一些自定义逻辑.但是,我的要求是当任何线程完成执行时,所有其他线程应该停止执行并返回.
实现这个的最佳方法是什么?我想通过拥有一个共享的布尔变量来做到这一点.当任何线程完成执行时,它将设置布尔值.所有线程都定期读取此变量,并在设置时退出.
此外,我的自定义逻辑是一个无限循环,一旦我知道其他一些线程已经完成执行,我想在当前迭代后停止执行.
这样做的正确方法是什么?
使用an ExecutorService
及其.invokeAny()
方法(注意:还有一个带超时的版本).
来自Javadoc:
执行给定的任务,返回已成功完成的任务的结果(即,不抛出异常),如果有的话.
一个你有你的结果,.shutdown()
执行者.
请参阅Executors
课程以获得符合您需求的执行者.
另一个解决方案是ExecutorCompletionService
班级; 在这种情况下,你.take()
不是.invokeAny()
,而是必须逐个提交每个任务.而且你还必须保留对你的引用,ExecutorService
因为你需要一个作为参数,并且还需要关闭它.
(注意:如果你没有返回结果,请创建实例)Callable<
Void
>