需求:有一个list集合,有三个检查方法checkA(list), checkB(list), checkC(list),三个方法从不同角度去检测list中的数据是否合法,当全部检查都通过时,再进行后续的操作。解决方案:我现在想用ExecutorService创建三个线程分别调用三个检查方法,提高效率。任何一个方法中发现无效数据直接抛一个异常结束该线程。问题:在主线程调用三个线程后,如何在主线程中catch住其中一个线程的异常,并将其他两个线程立即停止?看了一下executorservice的shutdown()方法和shutdownnow(),我理解的是,这两个方法都不能保证立即停止线程,不知道我的理解对吗?
1 回答
已采纳
是王小二呀
TA贡献88条经验 获得超19个赞
这么说吧,CPU单核心时,设计一个全局变量作为状态值,比如期望值为0,三个线程分别遍历检查list,每次遍历都去读这个状态值,只要三个线程有那一个在遍历过程中出错,即改变此状态值,此时其他两个线程便能监控到状态变量的改变,此时跳出遍历,结束线程即可。CPU多核心时,三个线程有可能分给三个核心去执行,此时涉及到竞写,可以对状态值加锁,也可在主线程再维护一个volatile变量,然后在主线程中为三个线程各自维护一个状态变量,check方法遍历时去检测volatile变量,当主线程监测到三个线程其中一个check出错改变自己的状态变量值时,主线程即改变此volatile变量,这时候呢由于这个变量的特性,其他两个线程会立即得到volatile变量值的变化,由此跳出遍历并结束线程。
添加回答
举报
0/150
提交
取消