9.ReentrantLock与AQS同步框架: 对于ReentrantLock来说,其执行逻辑如下所示: 1):尝试获取锁的对象,如果获取不到(意味着其它线程已经持有了锁,尚未释放),那么它就会进入到AQS的阻塞队列中 2):如果获取到,根据锁是公平锁还是非公平锁来进行不同的处理,如果是公平锁,线程会直接放到AQS阻塞队列的末尾,如果是非公平锁,那么会尝试进行cas计算,如果成功,则会直接获取到锁,如果失败,则与公平锁的处理方式一样 3):当锁被释放时(调用了unlock方法),那么底层会调用release方法对state进行减1操作,如果减1后,state值不为0,则release操作就执行完毕,如果减1操作后,state值为0,则调用LockSupport的unpark方法唤醒该线程后等待队列中的第一个后继线程,使之能够获取到对象的锁(release时,对于公平锁和非公平锁处理逻辑都是一致的),之所以调用release方法后state值不为0,原因在于ReentrantLock是可重入锁,表示线程可以多次调用lock方法,state值都会加1 4):对于ReentrantLock来说,所谓的上锁,就是对AQS中state成员变量加1,释放锁就是对state减1