Java 并发系列:重入锁死
可重入锁,指的是线程可以重复获得它已经持有的锁。
下面这个锁的实现是不可重入的:
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();
}
}
如果一个线程在两次调用lock间没有调用unlock,则就会出现死锁,即重入锁死。
避免重入锁死的方式有:
- 避免再次获取已经持有的锁。(不要重入)
- 使用可重入锁
Java类库中的Lock与ReadWriteLock类都是可重入锁。