[英]What happens when a thread holding a lock with ReentrantReadWriteLock fails?
如果由于未捕获的异常而持有ReentrantReadWriteLock.writeLock()的线程停止执行,则释放该锁,还是保持该锁,而所有其他线程现在都死锁了?
我假设“失败”是指未捕获的异常从Thread的run
方法的顶部传播,导致其停止执行。
如果finally
使用的线程正常阻塞,则它将在备份堆栈的途中解锁writeLock
。
但是,如果线程没有调用unlock()
,即使它不再运行,它仍然保留该监视器-因此,是的,其他线程将被死锁。
这就是为什么正确获取和释放资源至关重要的原因。 这也是坚持使用synchronized
块的一个原因,除非/直到您可以确定需要特定锁的功能-因为它们一定不会被释放。 (在您的情况下,我确定您确实需要单独的读/写锁,在这里我要提出一个更一般的观点。)
使用“显式锁定”时,必须使用try-finally块来释放您获得的任何锁定。
这是使用同步之间的主要区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.