天天看点

ReentrantLock重入锁以及实现原理

文章目录

  • ​​lock:锁​​
  • ​​lock概述​​
  • ​​lock的实现类​​
  • ​​ReentrantLock:重入锁​​
  • ​​FairSync与NonFairSync 公平锁与非公平锁的区别​​

lock:锁

lock概述

1.我们这里的lock类只是一个接口,具体的实现需要不同的lock类型去实现;      
package java.util.concurrent.locks;
import java.util.concurrent.TimeUnit;


public interface Lock {
    //锁定线程
    void lock();
    void lockInterruptibly() throws InterruptedException;
    //tryLock是在不阻塞线程的基础上,尝试获取锁
    boolean tryLock();
    //也可以设置获取锁的超时时间 tryLock(long time, TimeUnit unit)
    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    //释放锁定的线程,一般与lock方法一起使用
    void unlock();
    Condition newCondition();
}      

lock的实现类

ReentrantLock重入锁以及实现原理
ReentrantLock  重入锁, 本章详述
ReentrantReadWriteLock 重入读写锁  后面会详述
StampedLock 中的WriteLockView      

ReentrantLock:重入锁

FairSync与NonFairSync 公平锁与非公平锁的区别

1.FairSync与NonFairSync的主要区别: 如果当前线程不是锁的占有者,是否先加入到等待队列的队尾
  FairSync:公平锁的话,就先加入到等待队列的队尾,
  NonFairSync:非公平锁的话,就是不加如队列,直接进行获取锁      
public ReentrantLock() {
        sync = new NonfairSync();
    }
    public ReentrantLock(boolean fair) {
        sync = fair ? new FairSync() : new NonfairSync();
    }