文章目錄
- 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 重入鎖, 本章詳述
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();
}