默认非公平
可重入锁,基于AQS
1、静态内部类Sync
实现了tryRelease方法
自定义了nonfairTryAcquire() :非公平的加锁
2、实现了Sync的两个子类
NonfairSync:
直接继承了Sync
FairSync:
覆写了tryAcquire,里面多了两个判断
即:若state等于0,再判断等待队列中是否有其他线程,
整体比较简单,都是使用setState和compareAndSetState,进行判断
关键字
state:用来表示持有锁的次数,用于可重入
自定义的AQS:Sync
内部实现了tryRelease
加锁:复写tryAcquire
通过cas加锁,尝试设置state为1
若成功,则加锁成功
若失败,则使用AQS的acquire,阻塞地加锁
锁为非公平锁