0

正如标题所说,很好奇当前线程崩溃时读写锁会发生什么。

 readlock.lock();
 try {
    ...
 } finally {
   readlock.unlock();
 }

我们绝对可以在 finally 块中解锁以防止任何突然出现。但是如果 readLock.lock() 语句崩溃了,锁会自动释放吗?

谢谢,

4

3 回答 3

2
  • 如果readlock.lock抛出异常。
  • 锁定操作失败。
  • 没有获取锁。
  • unlock是必需的。

如果在 期间抛出运行时异常readlock.lock,但正在获取锁。lock作者错误地实现了它。您可以为作者提交错误报告 :)

于 2012-12-21T03:08:10.927 回答
1

如果您引用类,那么(尚未调用)java.util.concurrent.locks.ReentrantReadWriteLock之后的线程崩溃将不会释放读锁。readlock.lock()readlock.unlock()

但写锁却不同。写锁定义了一个所有者,并且只能由获取它的线程释放。相比之下,读锁没有所有权的概念,不要求释放读锁的线程与获得它的线程相同。

我建议放入readlock.lock()try-finally 语句。

于 2012-12-21T00:06:44.610 回答
0

这取决于您对“readlock”变量的实现以及“您的线程是如何崩溃的”。据我所见,“readlock”变量可以是任何类型,并且线程崩溃的方式有多种。

仅供参考,每个 java 对象都有一个“监视器”。如果您需要同步多个线程对共享变量的访问,我建议您花一些时间阅读 java 教程的这一章:http: //docs.oracle.com/javase/tutorial/essential/concurrency/index.html

于 2012-12-20T23:59:47.653 回答