Semaphore和CountDownLatch的释放应该都放在finally块中吧

来源:2-4 并发模拟-代码

MrLw

2018-10-20

不然中间出现异常不就会导致无法结束线程了吗?

写回答

1回答

Jimin

2018-10-20

你好,释放锁那步关键是保证能执行,虽然可能出现异常,但如果你之前已经确保能捕获可能出现的异常时,是否放在finally里都没什么问题,只是释放锁放在finally里你会感觉更放心一些。有时候这个类变量被放到其他类属性里以及放在复杂的环境里,不一定有合适的finally点,保证能处理掉所有异常及应对才关键。
举一个复杂点的情况,我们系统在做数据一致性时,有时遇到一些网络异常,尽管做try...catch了,但是网络异常带来的影响并没消除,因此会先记到本地,然后通过不断重试来保证在网络正常后执行,而之前出问题的点需要先行放过。这时有些finally里执行的语句就需要仔细考量一下,是否需要等到重试成功时再执行。

0
3
MrLw
回复
Jimin
明白了,谢谢老师
2018-10-23
共3条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程