手写一个ReentrantLock锁
手写ReentrantLock 最近学习了Java语言中锁相关知识,看了一下 ReentrantLock 源码,自己手写了一个 ReentrantLock 。 ReentrantLock 是一个可重入锁,并且在源码中通过构造函数可以使其在公平锁和非公平锁之间转换。 可重入锁即当前线程可以在不释放锁的情况下多次获取锁,但是释放锁的次数应与获取锁的次数相同,否则会抛出 IllegalMonitorStateException 异常。 公平锁和非公平锁的区别在与,公平锁使先进入等待队列的线程先获取锁,每个线程都有机会获取锁。非公平锁则是每个线程获取锁的几率不确定,非公平锁并发性较好,但容易造成某些线程长时间获取不到锁。 不可重入ReentrantLock,非公平 /** * 不可重入锁 */ public class WonderReentranrLock { //标记获取锁的线程,原子类型的引用保证原子性 private AtomicReference < Thread > owner = new AtomicReference < > ( ) ; //抢锁失败时进入等待队列 private Queue < Thread > waitQueue = new LinkedBlockingQueue ( ) ; /** * 加锁 */ public void lock ( ) { /