正如标题所说,很好奇当前线程崩溃时读写锁会发生什么。
readlock.lock();
try {
...
} finally {
readlock.unlock();
}
我们绝对可以在 finally 块中解锁以防止任何突然出现。但是如果 readLock.lock() 语句崩溃了,锁会自动释放吗?
谢谢,
正如标题所说,很好奇当前线程崩溃时读写锁会发生什么。
readlock.lock();
try {
...
} finally {
readlock.unlock();
}
我们绝对可以在 finally 块中解锁以防止任何突然出现。但是如果 readLock.lock() 语句崩溃了,锁会自动释放吗?
谢谢,
readlock.lock
抛出异常。unlock
是必需的。如果在 期间抛出运行时异常readlock.lock
,但正在获取锁。lock
作者错误地实现了它。您可以为作者提交错误报告 :)
如果您引用类,那么(尚未调用)java.util.concurrent.locks.ReentrantReadWriteLock
之后的线程崩溃将不会释放读锁。readlock.lock()
readlock.unlock()
但写锁却不同。写锁定义了一个所有者,并且只能由获取它的线程释放。相比之下,读锁没有所有权的概念,不要求释放读锁的线程与获得它的线程相同。
我建议放入readlock.lock()
try-finally 语句。
这取决于您对“readlock”变量的实现以及“您的线程是如何崩溃的”。据我所见,“readlock”变量可以是任何类型,并且线程崩溃的方式有多种。
仅供参考,每个 java 对象都有一个“监视器”。如果您需要同步多个线程对共享变量的访问,我建议您花一些时间阅读 java 教程的这一章:http: //docs.oracle.com/javase/tutorial/essential/concurrency/index.html