1.hashmap採用位運算定位陣列的下標,因為位運算效率高於模運算
2.hash的資料容量不是2次冪得話,可能造成hash不均勻,乙個位置可能永遠放不到
1.jdk7版本之前的concurrenthasmap採用seagment分段鎖的思想,進行兩次hash找到資料存放的位置,但是jdk8之後放棄了分段鎖,基本結構與hashmap基本類似,但是採用了鎖保證了安全併發,在jdk8中,兩種hashmap都會有鍊錶.鍊錶轉紅黑樹閾值8,但是實際長度是9
執行緒池從阻塞佇列取任務,沒有任務了則推出迴圈
為什麼上來解鎖
1.執行緒池種類:
1.newfixedthreadpool:固定數量執行緒池
2.aqs介紹:
3.如何保證鎖可重入:
獲取鎖的時候會把線城儲存下來
判斷線城是否是當前線城
4.公平鎖實現原理:見測阻塞佇列中是否有前驅佇列,即有沒有在等待的佇列,有說明需要等待排隊,實現公平原理
5.signal原理:被喚醒後從signal的等待佇列放到競爭鎖的佇列中
6.先獲取讀鎖,又想獲取讀鎖不可以,但是先獲取寫鎖,又想獲取讀鎖,是可以的
7.stampedlock:帶有時間戳的鎖,可以解決aba問題
8.semaphore:限制能同時訪問貢獻資源的執行緒上限
併發程式設計學習 併發程式設計的挑戰
死鎖 資源限制的挑戰 併發程式設計的目的是為了讓程式執行的更快,但是並不是啟動更多的執行緒,就能讓程式最大限度的併發執行。在進行併發程式設計時,如果希望通過多執行緒執行任務讓程式執行的更快,會面臨非常多的挑戰,比如上下文切換的問題,死鎖的問題,以及受限於硬體和軟體的資源限制問題 即使是單核處理器也支...
併發程式設計學習筆記
併發程式設計第2章,基礎篇 2.1執行緒安全 1併發程式設計即是要控制對共享的可變的變數的訪問操作順序 2保證同步的方法,在語法 級別來說,可以使用synchronized,volatile,或者是現式的鎖,或者使用原子變數 3好的設計是避免執行緒危險的良方,使用oo的方法盡量避免執行緒的隱患。4執...
JAVA併發程式設計學習
併發程式設計主要目的是為了在相同的時間內讓程式執行得更快或者處理更多的任務。為了實現這一目的,併發程式設計會面臨很多的挑戰。併發程式設計必然會帶來多執行緒之間的問題,比如上下文之間的切換,執行緒死鎖,以及硬體資源的限制。無論是單核還是多核處理器都支援多執行緒。在單核處理器中,cpu會給每個執行緒分配...