CAS 與 synchronized 的使用情景

2021-09-25 09:00:09 字數 310 閱讀 9105

cas 適用於寫比較少的情況下(多讀場景,衝突一般較少),synchronized 適用於寫比較多的情況下(多寫場景,衝突一般較多)。

對於資源競爭較少(執行緒衝突較輕)的情況,使用 synchronized 同步鎖進行執行緒阻塞,喚醒切換,以及使用者態核心態間的切換操作,都會額外消耗 cpu 資源;而 cas 基於硬體實現,不需要進入核心,不需要切換執行緒,操作自旋機率較少,因此可以獲得更高的效能

對於資源競爭嚴重(執行緒衝突嚴重)的情況,cas 自旋的概率會比較大,從而浪費更多的 cpu 資源,效率低於 synchronized

volatile與synchronized的區別

volatile本質是在告訴jvm當前變數在暫存器中的值是不確定的,需要從主存中讀取,synchronized則是鎖定當前變數,只有當前執行緒可以訪問該變數,其他執行緒被阻塞住.volatile僅能使用在變數級別,synchronized則可以使用在變數,方法.volatile僅能實現變數的修改可見...

Volatile與Synchronized的區別

j a執行緒的記憶體模型 j a的執行緒記憶體模型中定義了每個執行緒都有乙份自己的共享變數副本 本地記憶體 裡面存放自己私有的資料,其他執行緒不能直接訪問,而一些共享變數則存在主記憶體中,供所有執行緒訪問。上圖中,如果執行緒a和執行緒b要進行通訊,就要經過主記憶體,比如執行緒b要獲取執行緒a修改後的...

volatile和synchronized的區別

關於可見性的問題 可見性 即當讀寫兩個執行緒同時訪問同乙個變數時,用於確保寫執行緒更新變數後,讀執行緒再訪問該 變數時可以讀取到該變數最新的值。volatile和synchronized的區別 1.volatile本質是在告訴jvm當前變數在暫存器 工作記憶體 中的值是不確定的,需要從主存中讀取 s...