無同步: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的情形下才可以被獲取。乙個執行緒的獲取可以用另乙個執行緒來釋放。很像二元訊號量,但是釋放只能是本執行緒。臨界區是比互斥量更加嚴格的同步手段,訊號量和互斥量可以不同程序之間操作,也就是說 乙個程序建立了乙個互斥量或訊號量,另乙個程序...