ReentrantLock分析
主要分析下ReentrantLock锁的占用和释放过程。 AbstractOwnableSynchronizer{ /** * 表示当前占有独占锁的线程,为null时说明锁未被占用 */ private transient Thread exclusiveOwnerThread; } AbstractQueuedSynchronizer extend AbstractOwnableSynchronizer{ private transient volatile Node head;//队列首节点 private transient volatile Node tail;//队列尾节点 private volatile int state;//同步状态,表示锁是否被占用。可重入锁,占用锁时继续获取锁,state=2 } /** * waitStatus: *1:线程取消等待 *-1:后继节点的线程处于等待状态,需要当前结点唤醒 *-2:等待condition,condition.signale()唤醒,该线程会加入到队列中等待获取锁 *-3:下一次共享式同步状态获取将会被无条件地传播下去??没看懂 */ static final class Node { volatile int waitStatus;//当前线程的等待状态。状态被一个线程修改后,立即对其他线程可见 volatile