locksupport類是其他類實現鎖和同步的基礎
讀了原始碼就會知道,這個類主要利用了unsafe類中提供的part和unpart兩個方法.而locksupport類暴露出來的兩個核心介面也是part和unpart兩個.* basic thread blocking primitives for creating locks and other
* synchronization classes.
如果需要閱讀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 ...