重入锁死
重入死锁的概念:当一个线程在两次调用lock()间没有调用unlock()方法,那么第二次调用lock()就会被阻塞, 我们将这种现象称之为“重入死锁” --------------------------------------------------------- 重入锁死与死锁和嵌套管程锁死非常相似 锁和读写锁两篇文章中都有涉及到重入锁死的问题 --------------------------------------------------------- 当一个线程重新获取锁,读写锁或其他不可重入的同步器时,就可能发生重入锁死例:
可重入锁代码
public class Reentrant{
public synchronized outer(){
inner();
}
public synchronized inner(){
//业务代码
}
}
不可重入锁代码
public class Lock{
private boolean isLocked = false;
public synchronized void lock()
throws InterruptedException{
while(isLocked){
wait();
}
isLocked = true;
}
public synchronized void unlock(){
isLocked = false;
notify();
}
}
如何避免重入死锁
1.避免再次获取持有锁 2.使用可重入锁
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


