ReentrantLock 内部自定义了同步器sync,在加锁的时候通过CAS算法,将线程对象放到一个双向链表 中,每次获取锁的时候,检查当前维护的那个线程ID和当前请求的线程ID是否 一致,如果一致,同步状 态加1,表示锁被当前线程获取了多次。
源码如下:
finalbooleannonfairTryAcquire(intacquires) { finalThreadcurrent=Thread.currentThread(); intc=getState(); if (c==0) { if (compareAndSetState(0, acquires)) { setExclusiveOwnerThread(current); returntrue; } } elseif (current==getExclusiveOwnerThread()) { intnextc=c+acquires; if (nextc<0) // overflowthrownewError("Maximum lock count exceeded"); setState(nextc); returntrue; } returnfalse; }