下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第詳解Java并發(fā)編程之volatile關(guān)鍵字目錄1、volatile是什么?2、并發(fā)編程的三大特性3、什么是指令重排序4、volatile有什么作用?5、volatile可以保證原子性?6、volatile和synchronized對比總結(jié)
1、volatile是什么?
首先簡單說一下,volatile是什么?volatile是Java中的一個(gè)關(guān)鍵字,也是一種同步機(jī)制。volatile為了保證變量的可見性,通過volatile修飾的變量具有共享性。修改了volatile修飾的變量,其它線程是可以讀取到最新的值的
2、并發(fā)編程的三大特性
并發(fā)編程有三個(gè)重要特性:原子行、可見性、有序性
原子性:原子性是指一個(gè)或者多個(gè)操作,要么全部執(zhí)行且執(zhí)行過程不會被其它操作打斷,要么全部不執(zhí)行。
可見性:可見性是指共享變量對于多個(gè)線程都是可見的,也即一個(gè)線程修改了變量,其它線程馬上就能知道
有序性:有序性是指程序的執(zhí)行順序按照代碼的先后順便執(zhí)行
3、什么是指令重排序
假如我們寫一個(gè)程序,我們會期待這些語句的實(shí)際執(zhí)行順便和代碼的順序是一致的,大部分情況是一致的,但實(shí)際上,編譯器、JVM或者CPU都有可能出于優(yōu)化等目的,對執(zhí)行的順序進(jìn)行調(diào)整,這個(gè)就是指令重排序
重排序的好處:提高處理速度
代碼順序如圖:
指令重排后,a=100;a=a+100會提到一起執(zhí)行,效率提高
上面的例子,是可以提高執(zhí)行效率,但是有時(shí)候指令重排是會導(dǎo)致問題的,如下代碼例子,代碼順序是先初始化content,然后設(shè)置標(biāo)識為true,線程B檢測到為true之后,調(diào)用content的方法
如果指令重排后,這種情況就會出現(xiàn)沒初始化完成,就直接調(diào)用conten的方法
所以,指令重排有好處也有壞處,一般可能是cpu、編譯器或者是內(nèi)存會進(jìn)行指令重排,為了避免指令重排,保證并發(fā)編程的有序性,有時(shí)候需要使用synchronized或者volatile等等方式避免。volatile可以避免指令重排,保證并發(fā)編程的有序性,依賴于操作系統(tǒng)的內(nèi)存屏障
4、volatile有什么作用?
從前面的學(xué)習(xí)也可以指定,volatile關(guān)鍵字是可以保證并發(fā)編程的有序性和可見性的
保證可見性
volatile保證可見性:
使用volatile變量時(shí),必須重新從主內(nèi)存加載到工作內(nèi)存修改volatile變量后,必須馬上同步回主內(nèi)存
可見性涉及到Java內(nèi)存模型,詳細(xì)可以參考我上篇博客:鏈接
java內(nèi)存模型(JMM)結(jié)構(gòu)圖,每個(gè)Java線程都有自己的工作內(nèi)存,volatile修飾的變量,修改后,會自動(dòng)同步到主內(nèi)存;每個(gè)線程讀取時(shí)都會從主內(nèi)存先讀取到工作內(nèi)存的副本
注意:volatile只能保證變量的可見性,對于一個(gè)Java對象是不能保證的,要去對象具體的屬性設(shè)置volatile
保證有序性
對于并發(fā)編程的有序性問題,前面已經(jīng)做了比較詳細(xì)的描述,主要是cpu、jvm、內(nèi)存都會對代碼執(zhí)行順序進(jìn)行指令重排序,加上volatile可以保證有序性,避免指令重排,依賴于操作系統(tǒng)的內(nèi)存屏障
5、volatile可以保證原子性?
volatitle只能保證單個(gè)變量的原子性,不能保證一系列操作的原子操作的,所以volatile是線程不安全的,不具有原子性
6、volatile和synchronized對比
volatile不可以保證線程安全,synchronized可以保證線程安全volatile是輕量的,而且是沒有鎖機(jī)制的,性能比synchronized好vo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 32350.1-2025軌道交通絕緣配合第1部分:基本要求電工電子設(shè)備的電氣間隙和爬電距離
- 工作站財(cái)務(wù)制度
- 烘焙店店面衛(wèi)生管理制度
- 機(jī)械廠金工車間衛(wèi)生制度
- 管供水人員衛(wèi)生培訓(xùn)制度
- 廠房內(nèi)清理衛(wèi)生管理制度
- 單位文明衛(wèi)生制度匯編
- 大型活動(dòng)財(cái)務(wù)制度
- 連鎖運(yùn)營督導(dǎo)制度
- 快遞衛(wèi)生管理制度
- 簡愛插圖本(英)夏洛蒂·勃朗特著宋兆霖譯
- 中醫(yī)內(nèi)科-郁病課件
- 焊接專業(yè)人才培養(yǎng)方案
- 第二屆全國技能大賽江蘇省選拔賽焊接項(xiàng)目評分表
- 糖尿病護(hù)士年終總結(jié)
- 第20課 《美麗的小興安嶺》 三年級語文上冊同步課件(統(tǒng)編版)
- 糖尿病基礎(chǔ)知識培訓(xùn)2
- 手工藝品加工合同
- 研學(xué)旅行概論第六章
- GB/T 22176-2023二甲戊靈乳油
- 根據(jù)信用證制作商業(yè)發(fā)票、裝箱單、裝船通知
評論
0/150
提交評論