好好想想:::
public class MyLock implements Lock{
private boolean isLocked = false;
private Thread lockBy = null;
private int lockCount = 0;
@Override
public synchronized void lock() {
Thread currentThread = Thread.currentThread();
while(isLocked && currentThread != lockBy)
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
isLocked = true;
lockBy = Thread.currentThread();
lockCount ++;
}
@Override
public void lockInterruptibly() throws InterruptedException {
}
@Override
public boolean tryLock() {
return false;
}
@Override
public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
return false;
}
@Override
public synchronized void unlock() {
if(lockBy == Thread.currentThread()){
lockCount --;
if(lockCount == 0){
notify();
isLocked = false;
}
}
}
@Override
public Condition newCondition() {
return null;
}
}
public class Demo9 { MyLock lock = new MyLock(); public void a(){ lock.lock(); System.out.println("a"); b(); lock.unlock(); } public void b(){ lock.lock(); System.out.println("b"); lock.unlock(); } public static void main(String[] args){ Demo9 demo9 = new Demo9(); new Thread(new Runnable() { @Override public void run() { demo9.a(); } }).start(); } }