jdk原始碼之LockSupport

2022-05-20 20:34:14 字數 913 閱讀 9582

在前面說到了unsafe類,它給我提供了乙個「後門」,讓我們可以直接操作記憶體,掛起執行緒等操作。這一講我們來看看locksupport,顧名思義,它是給我們後面的locksupport提供支援的。

在我們過去的學習的,說起執行緒的掛起與恢復,我們就會想到wait與notify。在locksupport中提供了另乙個掛起(park)與恢復unpar**程的方式。兩者的區別如下

park函式消耗乙個許可,unpark函式提供乙個許可。注意的是unpark連續提供多個許可,假如執行緒a通過unpark難執行緒b提供了乙個許可,執行緒b呼叫park時會消耗這個許可,不會阻塞,可如果再呼叫時就會阻塞了。

//unsafe類的引用

private

static

final

unsafe unsafe;

//下面幾個都是相應的記憶體偏移位址,,這個偏移量比較重要,我們可以設定,表示執行緒被誰阻塞的,我們可以執行緒分析工具方便地定位原因。

private

static

final

long

parkblockeroffset;

private

static

final

long

seed;

private

static

final

long

probe;

private

static

final

long secondary;

static

catch (exception ex)

}

在我們的開發中不會直接使用到這個類,但在aqs、併發原子類,以及netty,kafaka底層實現中,都有這個類,所以了解學習這個開「後門」的類還是很有必要的。

原始碼解析 JDK原始碼之LinkedHashMap

linkedhashmap原始碼,基於 jdk1.6.43 他繼承了hashmap,並且實現了插入和訪問的有序功能 public class linkedhashmapextends hashmapimplements map 其也有乙個entry內部類,繼承了 hashmap 的entry 內部類...

JDK原始碼之Map

1.hashmap hashmap初始化的方式有四種。建立乙個entry陣列,預設初始長度為16,當大於0.75的時候,擴充套件為當前的2倍。有4中初始化map的方式。mapmap new hashmap mapmap2 new hashmap 17 mapmap3 new hashmap 15,2...

JDK原始碼之PriorityQueue原始碼剖析

優先佇列在程式開發中屢見不鮮,比如作業系統在進行程序排程時一種可行的演算法是使用優先佇列,當乙個新的程序被fork 出來後,首先將它放到佇列的最後,而作業系統內部的scheduler負責不斷地從這個優先佇列中取出優先順序較高的程序執行 爬蟲系統在執行時往往也需要從乙個優先順序佇列中迴圈取出高優先順序...