正如标题所说,好奇当前线程崩溃时readwritelock会发生什么。
readlock.lock();
try {
...
} finally {
readlock.unlock();
}
我们绝对可以在finally块中解锁以防止任何中断。但是如果readLock.lock()语句崩溃了,锁会自动释放吗?
谢谢,
答案 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