不可重入锁
public class UnreetrantLock {
private boolean isLock = false;
public synchronized void lock() throws InterruptedException{
System.out.println("进入锁lock:"+Thread.currentThread().getName());
if(isLock){
System.out.println("进入lock加锁:"+Thread.currentThread().getName());
wait();
}
isLock = true;
}
public synchronized void unlock(){
System.out.println("进入unlock解锁:"+Thread.currentThread().getName());
isLock = false;
notify();
}
}
可重入锁
public class ReetrantLock {
private boolean isLock = false;
private Thread lockOwner = null;
private int lockCount = 0;
public synchronized void lock() throws InterruptedException{
System.out.println("进入锁lock:"+Thread.currentThread().getName());
Thread thread = Thread.currentThread();
while (isLock && lockOwner!=thread){
System.out.println("进入lock加锁:"+Thread.currentThread().getName());
wait();
}
isLock = true;
lockCount++;
lockOwner = thread;
}
public synchronized void unlock(){
System.out.println("进入unlock解锁:"+Thread.currentThread().getName());
Thread thread = Thread.currentThread();
if(thread == this.lockOwner){
lockCount--;
if(lockCount == 0){
isLock = false;
lockOwner = null;
notify();
}
}
}
}