Reentrantlock——可重入锁
内建锁隐式支持重入锁,Synchronized通过获取自增,释放自减的方式实现重入
1.重入锁实现原理
重入锁的特点:
1)线程获取锁时,如果已经获取锁的线程是当期线程直接再次获取;
2)由于锁会被获取N次,因此锁只有被释放N次之后才算真正释放成功
2.公平锁与非公平锁
公平锁:锁的获取顺序一定满足时间上的绝对顺序,等待时间最长的线程一定最先获取到锁
Reentrantlock默认使用非公平锁
对比:公平锁保证每次获取锁均为同步队列的第一个节点,保证了请求资源时间上的绝对顺序,但是效率
较低,需要频繁的进行上下文切换。
非公平锁会降低性能开销,降低一定得上下文切换,但是可能导致其他线程永远无法获取到锁,造成线程“饥饿”现象。
通常来讲,没有特定公平性要求,尽量选择非公平锁