背后原理是AQS
线程1通过CAS获取到房卡,其他线程要的话要进入一个队列等待,当线程1用完之后调用,unlock,排在队列最前面的就可以拿到这个锁房卡
自定义锁
当前线程是null就是房卡是空闲状态就把Thread.currentThread这个值存到owner对象中,如果拿到了循环就不会进来了,拿不到就进来加到阻塞队列中等待
如果是拿着锁的就直接置空,然后通过一个for循环把其他线程唤醒
刚释放锁的那个线程要房卡的话又回去跑上面的while循环要排队
被唤醒的线程从队列中被移除去使用这把锁
先来先得公平锁(研究AQS解析)