package com.freeflying.thread.volatil;
/** * volatile的非原子性
* @classname: volatilenotatomic
* @description:
* @author freeflying
* @date 2023年7月14日
*/public class volatilenotatomic
for(int i=0;i<100;i++) }}
class volatilenotatomicex extends thread
system.out.println("count="+count);
} @override
public void run()
}
結果:......
count=5074
count=4974
count=4874
count=4774
count=3574
結論:volatile主要使用的場合是在多個執行緒中可以感知例項變數被更改了,並且可以獲得最新的值使用,也就是多執行緒讀取共享變數時可以獲取最新值使用 原子性和volatile
所謂原子操作,就是 不可中斷的乙個或一系列操作 在確認乙個操作是原子的情況下,多執行緒環境裡面,我們可以避免僅僅為保護這個操作在外圍加上效能昂貴的鎖,甚至借助於原子操作,我們可以實現互斥鎖。很多作業系統都為int型別提供了 賦值的原子操作版本,比如 nt 提供了 interlockedexchang...
volatile不能保證原子性
在討論原子性操作時,我們經常會聽到乙個說法 任意單個volatile變數的讀寫具有原子性,但是volatile 這種操作除外。所以問題就是 為什麼volatile 不是原子性的?因為它實際上是三個操作組成的乙個符合操作。首先獲取volatile變數的值 將該變數的值加1 將該volatile變數的值...
volatile不保證原子性
1.什麼是原子性?不可分割 完整性,即某個執行緒正在做某個具體業務時,中間不可以被加塞或者被分割,需要整體完整,要麼同時成功,要麼同時失敗 2.寫乙個demo來驗證volatile不保證原子性 大概率結果不是2000 因為i 不是一步操作,而不是一步操作,所以無法保證原子性 class source...