直接调用 JxdLock 就可以 Lock lock =new JxdLock() 和 我们平常用的 一样Lock lock =new ReentrantLock();
只是JxdLock() 替代了 ReentrantLock();
import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.LockSupport; public class JxdLock implements Lock { //拿到了一个针对线程操作的原子操作类(13号技师) AtomicReference<Thread> thech13=new AtomicReference<>(); //等待列表(用于存放没有抢到的13号技师的业务线程) public LinkedBlockingDeque<Thread> waiter =new LinkedBlockingDeque<>(); //加锁方法lock @Override public void lock() { while(!thech13.compareAndSet(null,Thread.currentThread()) ) {//如果拿不到13号技师怎么办? waiter.add(Thread.currentThread());//拿不到没关系加入等待队列 LockSupport.park();//等待,让当前线程等待(