volatile 關鍵字:
當多個執行緒進行操作共享資料時,可以保證記憶體中的資料可見。
相較於 synchronized 是一種較為輕量級的同步策略。
注意:
1. volatile 不具備「互斥性」:
互斥性:多個執行緒訪問時,只能有乙個執行緒可以拿到鎖。
2. volatile 不能保證變數的「原子性」
原子性問題解釋
i++ 的原子性問題:i++ 的操作實際上分為三個步驟「讀-改-寫」
舉例:int i = 10;
i = i++; //10,結果為10
下面是計算機底層的運算
int temp = i;
i = i + 1;
i = temp;
從以上三步可以看出,結果 i=10, 這是計算機底層的運算
因為i++有讀改寫三步操作,所以volatile關鍵字在這裡解決不了問題,volatile只是保證資料的都在主存中進行,
當多執行緒進行同時訪問的時候,並不保證這三步操作具有乙個同步性
併發程式設計 volatile
併發程式設計中的三個概念 原子性即乙個操作或者多個操作 要麼全部執行並且執行的過程不會被任何因素打斷,要麼就都不執行 可見性指當多個執行緒訪問同乙個變數時,乙個執行緒修改了這個變數的值,其他執行緒能夠立即看得到修改的值 有序性即程式執行的順序按照 的先後順序執行 jvm在真正執行這段 的時候會保證語...
Java併發程式設計 volatile關鍵字解析
reference 總結 三種併發 synchronized,volatile,lock synchronized單執行緒,執行緒安全,但效率不足 volatile 能保證可見性,順序性,但是不能保持原子性,特別是在i 並不總是執行緒安全的 volatile 變數具有 synchronized 的可...
Java 併發程式設計之 volatile 關鍵字
作用 保證不同執行緒對volatile修飾的變數進行操作時的可見性,即乙個執行緒修改了某個變數的值,這新值對其他執行緒來說是立即可見的。禁止進行指令重排序。volatile 的可見性 public class test 09 system.out.println end public static ...