繁体   English   中英

用ReentrantReadWriteLock持有锁的线程失败时会发生什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM