package com.zx.lock;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
public class MyLock implements Lock {
//要維護1.當前是否有鎖(保證能鎖住),2.拿到鎖的執行緒和3.已上鎖的數量(保證可重入)
//判斷當前是否有鎖。
private volatile boolean isLock=false;
//拿到鎖的執行緒。
private Thread lockedThread=null;
//已上的鎖的數量。
private int lockCount;
@Override
public synchronized void lock() {
Thread currentThread = Thread.currentThread();
while(isLock && currentThread!=lockedThread){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
isLock=true;
lockedThread=currentThread;
lockCount++;
}
@Override
public synchronized void unlock() {
if(Thread.currentThread()==lockedThread){
lockCount--;
if(lockCount==0){
notifyAll();
isLock=false;
}
}
}
@Override
public void lockInterruptibly() throws InterruptedException {
// TODO Auto-generated method stub
}
@Override
public boolean tryLock() {
// TODO Auto-generated method stub
return false;
}
@Override
public Condition newCondition() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
// TODO Auto-generated method stub
return false;
}
}