为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA多线程异常处理

JAVA多线程异常处理

往前迈一步 2017-11-17 11:13:08
需求:有一个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变量值的变化,由此跳出遍历并结束线程。

查看完整回答
1 反对 回复 2017-11-17
  • 1 回答
  • 0 关注
  • 930 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信