執行緒安全與同步 鎖優化

2021-09-12 18:22:50 字數 660 閱讀 8727

無同步:a. 可重入**;b. threadlocal

互斥同步(阻塞同步):synchronized/lock

lock的優勢:可中斷;可有多個newcondition;自定義是否公平鎖

非阻塞同步:

cas – 機器指令實現 – unsafe

loop:

...cas

...

cas問題:

a. aba問題 – 解決:加鎖

b. 迴圈等待問題 – 解決:機器指令pause

c. 乙個變數原子性,多個變數需要 – 解決:鎖 or 拼接多個變數

自旋鎖/自適應自旋

a. 等待10次

b. 根據上次獲取鎖時間自適應等待:自旋 or 切換執行緒狀態從使用者態到和心態

鎖消除:消除多餘的加鎖操作

鎖粗化:將多個頻繁的可合併鎖粗化為乙個

輕量級鎖、偏向鎖

主要是針對鎖競爭不激烈的情景,提高鎖利用率

借助物件head部分的資訊(markword)

|- 01 - 偏向鎖

|- 00 - 輕量級鎖

|- 10 - 重量級鎖

|- 11 - gc

出現競爭時狀態轉換:偏向鎖(記錄threadid)---->輕量級鎖(cas)---->重量級鎖

執行緒安全與鎖優化

樂觀鎖 cas aba 版本號 atomicstampedreference 時間戳atomicmarkablereference boolean 可重入 絕對執行緒安全,不依賴共享資料 使用引數,區域性變數 自旋鎖 認為鎖很快釋放,占用cpu迴圈獲取鎖,超過一定次數 時間 再掛起執行緒,自旋次數上...

JVM執行緒安全與鎖優化

1.不可變 不可變的物件一定是執行緒安全的。如string類。2.絕對執行緒安全 3.相對執行緒安全 4.執行緒相容 5.執行緒對立 1.互斥同步 阻塞式同步 1 同步指的是 多個執行緒併發訪問共享資料時,保證共享資料在同一時刻只能被乙個執行緒使用。2 互斥指的是 同步的手段。如 臨界區 互斥量和訊...

執行緒同步與鎖

二元訊號量和多元訊號量,是乙個變數,獲取 1,釋放 1,當變數處於 0的情形下才可以被獲取。乙個執行緒的獲取可以用另乙個執行緒來釋放。很像二元訊號量,但是釋放只能是本執行緒。臨界區是比互斥量更加嚴格的同步手段,訊號量和互斥量可以不同程序之間操作,也就是說 乙個程序建立了乙個互斥量或訊號量,另乙個程序...