并发编程(一)__volatile关键字
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只是保證數據的都在主存中進行,
當多線程進行同時訪問的時候,并不保證這三步操作具有一個同步性
轉載于:https://www.cnblogs.com/dreamHighMjc/p/8497053.html
總結
以上是生活随笔為你收集整理的并发编程(一)__volatile关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OSChina 周六乱弹 —— 老用户与
- 下一篇: 并发编程(四)__ConcurrentH