Java中volatile關鍵字

2021-09-25 03:24:13 字數 1063 閱讀 7416

當多個執行緒操作共享資料時,執行緒先讀取記憶體中的資料,並各自快取乙份,然後對快取資料進行修改,最後再寫入到記憶體中,但有時候由於程式執行速度快(如while操作),導致沒有及時去記憶體中讀取新的資料,而此時有可能其它執行緒已經修改了共享的資料,這就可能導致程式執行出現不可想象的偏差,而volatile就是為了防止這種偏差出現。

volatile可保證記憶體中的資料可見(就是每次都會去讀記憶體中的資料,而不是快取中的資料)。相較於synchronized是一種較為輕量級的同步策略。

案例分析:

public

class

testvolatile

}*/// 情況二:加鎖、效率較低

/*while (true)

}}*/

// 情況三:使用volatile

while

(true)}

}}class

threaddemo

implements

runnable

catch

(interruptedexception e)

flag =

true

; system.out.

println

("flag = "

+flag);}

public

boolean

isflag()

public

void

setflag

(boolean flag)

}

注意:

1、volatile不具備「互斥性」。也就是說,volatile修飾的變數允許多個執行緒讀寫,而具有「互斥性」的synchronized同時只允許乙個執行緒讀寫。

2、volatile不能保證變數的「原子性」。也就是說,volatile修飾的變數的讀、寫操作是可分割的。

java 中volatile關鍵字

1.volatile關鍵字往往用於多執行緒,保證了執行緒可以正確讀取其他執行緒傳入的值。2.volatile的特殊規則保證了volatile變數值修改後的新值立刻同步到主記憶體,每次使用volatile變數前立即從主記憶體中重新整理,因此volatile保證了多執行緒之間的操作變數的可見性,而普通變...

java中關鍵字volatile

1.用在多執行緒同步變數時,執行緒為了提高效率,將某成員變數 如a 拷貝了乙份 如b 執行緒中對a的訪問其實訪問的是b。只在某些動作時才進行a和b的同步。因此存在a和b不一致的情況。volatile就是用來避免這種情況的。volatile告訴jvm,它所修飾的變數不保留拷貝,直接訪問主記憶體中的 也...

JAVA中的volatile關鍵字

大家最熟悉的保證執行緒安全的技術是lock和synchronized塊 後面就統稱鎖了 但如果在一些對排他性 一會介紹 沒有太多限制的變數上使用鎖會花費很多時間和資源,為了優化程式效能,就有了volatile。鎖提供兩種特性 排他性和可見性。排他性很好理解,就是只有乙個執行緒可以對鎖住的東東進行操作...