volatile的非原子性

2021-08-21 10:44:43 字數 630 閱讀 7013

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...