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 重入锁, 本章详述
ReentrantReadWriteLock 重入读写锁 后面会详述
StampedLock 中的WriteLockView
ReentrantLock:重入锁
FairSync与NonFairSync 公平锁与非公平锁的区别
1.FairSync与NonFairSync的主要区别: 如果当前线程不是锁的占有者,是否先加入到等待队列的队尾
FairSync:公平锁的话,就先加入到等待队列的队尾,
NonFairSync:非公平锁的话,就是不加如队列,直接进行获取锁
** 这里我们创建ReentrantLock的时候,默认是非公平的锁**
public ReentrantLock() {
sync = new NonfairSync();
}
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}