如果当前线程崩溃,readwritelock会发生什么

时间:2012-12-20 23:35:54

标签: java multithreading reentrantreadwritelock

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

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

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

谢谢,

3 个答案:

答案 0 :(得分:2)

  • 如果readlock.lock抛出异常。
  • 锁定操作失败。
  • 没有获得锁定。
  • 不需要unlock

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

答案 1 :(得分:1)

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

虽然与写锁不同。写锁定义了所有者,只能由获取它的线程释放。相反,读锁没有所有权概念,并且不要求释放读锁的线程与获取它的线程相同。

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

答案 2 :(得分:0)

这取决于你的'readlock'变量的实现和'你的线程如何崩溃'。据我所知,'readlock'变量可以是任何类型,并且线程可以有多种方式崩溃。

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