重入锁死
重入死锁的概念:当一个线程在两次调用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.使用可重入锁
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。