主要方法: lock(加锁) unlock(解除锁)
package com.code.constructor.lock;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
public class MyLock implements Lock {
/**
* 自定义lock
*/
private boolean isUseLock = false; // 锁状态是否使用中
private Thread useLock = null; // 使用锁的线程
private int lockCount = 0; // 可重入锁的线程使用次数统计
@Override
public synchronized void lock() {
Thread nowThread = Thread.currentThread();
while (isUseLock && nowThread != useLock) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
useLock = nowThread;
isUseLock = true; // 使用中
lockCount++;
}
@Override
public synchronized void unlock() {
Thread nowThread = Thread.currentThread();
if (nowThread == useLock) {
lockCount--;
if (lockCount == 0) {
isUseLock = false;
notifyAll();
}
}
}
@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 Condition newCondition() {
return null;
}
}