如果线程持有ReentrantReadWriteLock.writeLock()停止执行,由于未捕获到异常,被锁释放,抑或是举行,现在所有的其他线程死锁?会发生什么?
Q
会发生什么?
1
A
回答
3
我假设通过“失败”,你的意思是一个未捕获的异常传播离开线程的顶端run
方法,导致它停止执行。
如果线程使用finally
正确阻塞,那么它将在备份堆栈的过程中解锁writeLock
。
但是,如果线程没有调用unlock()
,它仍然保持该监视器,即使它不再运行 - 所以是的,其他线程将会死锁。
这就是为什么它是获取和正确释放资源的关键重要。而且也是一个原因坚持块,除非/直到你能证明你需要特定的锁的功能 - 因为他们不能不被释放。 (在你的情况下,我敢肯定,你需要单独的读/写锁,我正在做一个更一般的点这里)。
0
您必须使用使用“明确锁定”当一个try-finally块,释放你获得的任何锁定。
这是使用同步之间的关键区别。
相关问题
- 1. 会发生什么?
- 2. 会发生什么?
- 3. 发生故障时会发生什么?
- 4. Form.Close后会发生什么?
- 5. EntityManager.persist()后会发生什么
- 6. Office VBA会发生什么?
- 7. 什么时候会发生?
- 8. netdev_open后会发生什么?
- 9. gcc -g:会发生什么
- 10. 会发生什么成员
- 11. * ngFor后会发生什么?
- 12. 为什么会发生? java
- 13. FileStream.copyTo(Net.ConnectStream)实习生会发生什么?
- 14. iPhone开发计划:会发生什么?
- 15. Android - 后台活动会发生什么?
- 16. 中断HTTP流时会发生什么?
- 17. Grails:groovy.sql.Sql和Model.withTransaction会发生什么?
- 18. swf嵌入时会发生什么?
- 19. 不完整的robots.txt,会发生什么?
- 20. 当我ping 127.0.0.1时会发生什么
- 21. 如果HttpClient.execute()中断会发生什么?
- 22. perl脚本结束会发生什么?
- 23. reduceByKey在执行时会发生什么?
- 24. 百胜降级会发生什么?
- 25. UIView隐藏真的会发生什么?
- 26. CLR GC循环会发生什么?
- 27. 孩子过程会发生什么?
- 28. 为什么它不会发生死锁?
- 29. 重定向unique_ptr时会发生什么?
- 30. 如果action =“”会发生什么?