1、简单实现(不可重入)
Lock的实现类:
package mylock;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
public class MyLock implements Lock {
boolean isHeld = false;//当前锁有没有被线程持有
@Override
public synchronized void lock() {
if (isHeld) {//如果被线程持有,则当前线程等待
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
isHeld = true;//被被线程持有,则当前线程获取到锁
}
@Override
public synchronized void unlock() {
notify();//随机唤醒一个等待的线程
isHeld=false;//没有被持有
}
@Override
public void lockInterruptibly() throws InterruptedException {
}
@Override
public boolean tryLock() {
return false;
}
@Override
public boolean tryLock(long time, Ti