参考博文:https://blog.csdn.net/zxd8080666/article/details/83214089

1.概述

        可重入:某个线程已经获取某个锁,还可以再次获取锁而不出现死锁。即可以重复获取相同的锁。可重入降低了编程的复杂性。

2.ReentrantLock和synchronized区别

        可重入锁种类:synchronized和ReentrantLock         使用ReentrantLock不同点:使用ReentrantLock,与synchronized不同,需要手动释放锁,并且加锁次数和释放锁的次数要一样。         具体区别参考以下博文,博主总结的很详细,一目了然:https://blog.csdn.net/zxd8080666/article/details/83214089  

3.ReentrantLock的三个独有功能

        1.等待可中断,持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待,这相当于Synchronized来说可以避免出现死锁的情况。通过lock.lockInterruptibly()来实现这个机制。         2.公平锁,多个线程等待同一个锁时,必须按照申请锁的时间顺序获得锁,Synchronized锁非公平锁,ReentrantLock默认的构造函数是创建的非公平锁,可以通过参数true设为公平锁,但公平锁表现的性能不是很好。         3.锁绑定多个条件,一个ReentrantLock对象可以同时绑定对个对象。ReenTrantLock提供了一个Condition(条件)类,用来实现分组唤醒需要唤醒的线程们,而不是像synchronized要么随机唤醒一个线程要么唤醒全部线程。  

4.ReenTrantLock的使用场景

        需要实现ReenTrantLock的三个独有功能时实现。