AQS原始碼分析 08(LockSupport)

2021-10-20 16:22:30 字數 1209 閱讀 2964

![image.png]( object]&name=image.png&originheight=85&originwidth=599&size=5821&status=done&style=none&width=570)

![image.png]( object]&name=image.png&originheight=173&originwidth=567&size=11550&status=done&style=none&width=558)

新增的

//用於實現阻塞當前執行緒的作用,引數blocker是用來表示當前執行緒在等待的物件(阻塞物件),主要用於問題排查和系統監控

public

static

void

park

(object blocker)

//阻塞當前執行緒,最長不超過nanos納秒,返回條件在park()的基礎上增加了超時返回

public

static

void

parknanos

(long nanos)

//阻塞當前執行緒,阻塞物件為blocker,最長不超過nanos納秒

public

static

void

parknanos

(object blocker,

long nanos)

}

//阻塞當前執行緒,直到deadline時間(從2023年開始到deadline時間的毫秒數)

public

static

void

parkuntil

(long deadline)

//阻塞當前執行緒,阻塞物件對blocker,直到deadline

public

static

void

parkuntil

(object blocker,

long deadline)

//喚醒處於阻塞狀態的執行緒thread

public

static

void

unpark

(thread thread)

AQS原始碼分析

如上 用jmeter模擬30個請求同時下單,結果30個請求都下單成功,產生了超賣問題。下面實現自定義乙個同步器來實現自定義鎖 2021 7 1 自定義aqs實現 public class mylock public void setstate int state public thread getl...

AQS原始碼解析

公平鎖 fairsync 核心方法 public final void acquire int arg tryacquire arg 方法 protected final boolean tryacquire int acquires 重入鎖 state 1 else if current gete...

AQS原始碼解析

加鎖從 先看一下 acquire方法開始 private transient volatile node head 頭節點 獲取鎖的執行緒節點 private transient volatile node tail 尾節點node 內部類 共享 static final node shared n...