更新時間:2020-06-10 16:12:09 來源:動力節(jié)點(diǎn) 瀏覽1978次
Java™語言包含兩種內(nèi)在的同步機(jī)制:同步塊(或方法)和volatile變量。這兩種機(jī)制的提出都是為了實(shí)現(xiàn)代碼線程的安全性。其中Volatile變量的同步性較差(但有時它更簡單并且開銷更低),而且其使用也更容易出錯。
之所以要單獨(dú)提出volatile這個不常用的關(guān)鍵字原因是這個關(guān)鍵字在高性能的多線程程序中也有很重要的用途,只是這個關(guān)鍵字用不好會出很多問題。
首先考慮一個問題,為什么變量需要volatile來修飾呢?
要搞清楚這個問題,首先應(yīng)該明白計算機(jī)內(nèi)部都做什么了。比如做了一個i++操作,計算機(jī)內(nèi)部做了三次處理:讀?。薷模瓕懭搿?/p>
同樣,對于一個long型數(shù)據(jù),做了個賦值操作,在32系統(tǒng)下需要經(jīng)過兩步才能完成,先修改低32位,然后修改高32位。
假想一下,當(dāng)將以上的操作放到一個多線程環(huán)境下操作時候,有可能出現(xiàn)的問題,是這些步驟執(zhí)行了一部分,而另外一個線程就已經(jīng)引用了變量值,這樣就導(dǎo)致了讀取臟數(shù)據(jù)的問題。
通過這個設(shè)想,就不難理解volatile關(guān)鍵字了。
volatile可以用在任何變量前面,但不能用于final變量前面,因為final型的變量是禁止修改的。也不存在線程安全的問題。
Java技術(shù)相關(guān)內(nèi)容
Java Volatile關(guān)鍵字使用場景:http://www.dabaquan.cn/tutorial_java_advance/1262.html
Java中Volatile關(guān)鍵字:http://www.dabaquan.cn/tutorial_java_advance/1261.html
以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“Java線程關(guān)鍵字,volatile關(guān)鍵字”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743