讀LockSupport原始碼

2021-09-20 08:06:55 字數 1975 閱讀 2588

locksupport類是其他類實現鎖和同步的基礎

* basic thread blocking primitives for creating locks and other

* synchronization classes.

讀了原始碼就會知道,這個類主要利用了unsafe類中提供的part和unpart兩個方法.而locksupport類暴露出來的兩個核心介面也是part和unpart兩個.

如果需要閱讀unsafe類原始碼,參考我的另一篇博文:讀unsafe類原始碼

//構造方法私有化

private

locksupport() {} // cannot be instantiated.

// 引用unsafe類

private

static

final sun.misc.unsafe unsafe;

//thread類中 parkblocker  欄位的偏移量

private

static

final

long parkblockeroffset;

//thread 類中 threadlocalrandomseed 欄位的偏移量

private

static

final

long seed;

//thread 類中 threadlocalrandomprobe 欄位的偏移量

private

static

final

long probe;

//thread 類中 threadlocalrandomsecondaryseed 欄位的偏移量

private

static

final

long secondary;

//初始化上面4個字段的值

static catch (exception ex)

}//把 thread 例項 t 的 parkblocker 欄位的值設定為 arg

private

static

void

setblocker(thread t, object arg)

//獲取物件 t 中 parkblocker 欄位的值

public

static object getblocker(thread t)

// 取消阻塞執行緒,如果執行緒已經處於非阻塞狀態,那麼下次呼叫park時不會阻塞執行緒

public

static

void

unpark(thread thread)

// 使當前呼叫執行緒在給定物件上阻塞(不能保證一定阻塞,

// 因為如果之前在非阻塞狀態呼叫了unpar方法的話,此次呼叫park方法就不會阻塞執行緒)

public

static

void

park(object blocker)

// 阻塞執行緒

public

static

void

park()

// 使當前執行緒在blocker物件上阻塞給定的納秒時間

public

static

void

parknanos(object blocker, long nanos)

}// 使當前執行緒在blocker物件上阻塞到給定的時間點

// 這個時間點是從epoch time(1970-01-01 00:00:00 utc)開始算起的某個具體的時間點。

public

static

void

parkuntil(object blocker, long deadline)

歡迎關注訂閱號:

jdk原始碼之LockSupport

在前面說到了unsafe類,它給我提供了乙個 後門 讓我們可以直接操作記憶體,掛起執行緒等操作。這一講我們來看看locksupport,顧名思義,它是給我們後面的locksupport提供支援的。在我們過去的學習的,說起執行緒的掛起與恢復,我們就會想到wait與notify。在locksupport...

16 LockSupport原始碼分析

locksupport原始碼分析 主要用於提供阻塞執行緒,和解除阻塞的方法。通過unsafe來實現的。屬性方法總結 final long parkblockeroffset 執行緒中parkblocker屬性的偏移量 可以通過該偏移位址獲取或者設定該字段的值,即修改獲取thread下的parkblo...

讀HashSet原始碼

先看建構函式 public hashset public hashset int initialcapacity public hashset int initialcapacity,float loadfactor 這個構造方法不是public的,僅用於linkedhashset.hashset ...