1.ReentrantLock 是可重入锁。
可重入的意思是在线程已经获取某个共享资源的锁之后,释放锁之前 还可以再次对于这个共享资源获取锁。
2.ReentrantLock 是基于AQS实现的。分为公平锁和非公平锁。
AQS 是一种定义了多线程访问共享资源的同步器框架。AQS并不实现任何功能,底层是维护了一个CLH 虚拟的双向链表,其中节点是线程。
AQS原理文章:https://www.cnblogs.com/waterystone/p/4920797.html
3.ReentrantLock原理
当一个线程获想要取到一个共享资源的锁时,先看该资源的status值是否为0(0说明该资源未被加锁,大于0说明被其他线程加锁了)如果为0,获取该资源的锁,把status的值设为1;如果大于0,把该线程加入虚拟的双向链表中的尾节点。同时使用CAS一直询问共享资源的status是否为0。如果为0,判断当前节点是否为头节点,如果是头节点,获取锁,如果不是,继续等待。