亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java 線程/內存模型的缺陷和增強

2019-11-17 06:34:33
字體:
來源:轉載
供稿:網友

     本文是由JR主持寫作的《J2SE進階》一書的部分章節整理而成,《J2SE進階》正在寫作、完善階段。您閱讀后,有任何建議、批評,請 和我聯系 ,或在 這兒留言 ?!禞2SE進階》寫作項目組感謝您閱讀本文。


     java在語言層次上實現了對線程的支持。它提供了Thread/Runnable/ThreadGroup等一系列封裝的類和接口,讓程序員可以高效的開發Java多線程應用。為了實現同步,Java提供了synchronize要害字以及object的wait()/notify()機制,可是在簡單易用的背后,應藏著更為復雜的玄機,很多問題就是由此而起。

一、Java內存模型


在了解Java的同步秘密之前,先來看看JMM(Java Memory Model)。
Java被設計為跨平臺的語言,在內存治理上,顯然也要有一個統一的模型。而且Java語言最大的特點就是廢除了指針,把程序員從痛苦中解脫出來,不用再考慮內存使用和治理方面的問題。
可惜世事總不盡如人意,雖然JMM設計上方便了程序員,但是它增加了虛擬機的復雜程度,而且還導致某些編程技巧在Java語言中失效。

JMM主要是為了規定了線程和內存之間的一些關系。對Java程序員來說只需負責用synchronized同步要害字,其它諸如與線程/內存之間進行數據交換/同步等繁瑣工作均由虛擬機負責完成。如圖1所示:根據JMM的設計,系統存在一個主內存(Main Memory),Java中所有變量都儲存在主存中,對于所有線程都是共享的。每條線程都有自己的工作內存(Working Memory),工作內存中保存的是主存中某些變量的拷貝,線程對所有變量的操作都是在工作內存中進行,線程之間無法相互直接訪問,變量傳遞均需要通過主存完成。
Java 線程/內存模型的缺陷和增強(圖一)
圖1 Java內存模型示例圖

線程若要對某變量進行操作,必須經過一系列步驟:首先從主存復制/刷新數據到工作內存,然后執行代碼,進行引用/賦值操作,最后把變量內容寫回Main Memory。Java語言規范(JLS)中對線程和主存互操作定義了6個行為,分別為load,save,read,write,assign和use,這些操作行為具有原子性,且相互依靠,有明確的調用先后順序。具體的描述請參見JLS第17章。

我們在前面的章節介紹了synchronized的作用,現在,從JMM的角度來重新審閱synchronized要害字。
假設某條線程執行一個synchronized代碼段,其間對某變量進行操作,JVM會依次執行如下動作:
(1) 獲取同步對象monitor (lock)
(2) 從主存復制變量到當前工作內存 (read and load)
(3) 執行代碼,改變共享變量值 (use and assign)
(4) 用工作內存數據刷新主存相關內容 (store and write)
(5) 釋放同步對象鎖 (unlock)
可見,synchronized的另外一個作用是保證主存內容和線程的工作內存中的數據的一致性。假如沒有使用synchronized要害字,JVM不保證第2步和第4步會嚴格按照上述次序立即執行。因為根據JLS中的規定,線程的工作內存和主存之間的數據交換是松耦合的,什么時候需要刷新工作內存或者更新主內存內容,可以由具體的虛擬機實現自行決定。假如多個線程同時執行一段未經synchronized保護的代碼段,很有可能某條線程已經改動了變量的值,但是其他線程卻無法看到這個改動,依然在舊的變量值上進行運算,最終導致不可預料的運算結果。

二、DCL失效


這一節我們要討論的是一個讓Java丟臉的話題:DCL失效。在開始討論之前,先介紹一下LazyLoad,這種技巧很常用,就是指一個類包含某個成員變量,在類初始化的時候并不立即為該變量初始化一個實例,而是等到真正要使用到該變量的時候才初始化之。
例如下面的代碼:
代碼1



class Foo {
PRivate Resource res = null ;

public Resource getResource() {
if (res == null )
res = new Resource();
return res;
}
}


由于LazyLoad可以有效的減少系統資源消耗,提高程序整體的性能,所以被廣泛的使用,連Java的缺省類加載器也采用這種方法來加載Java類。
在單線程環境下,一切都相安無事,但假如把上面的代碼放到多線程環境下運行,那么就可能會出現問題。假設有2條線程,同時執行到了if(res == null),那么很有可能res被初始化2次,為了避免這樣的Race Condition,得用synchronized要害字把上面的方法同步起來。代碼如下:
代碼2



Class Foo {
Private Resource res = null ;
Public synchronized Resource getResource() {
If (res == null )
res = new Resource();
return res;
}
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人国产精品久久久久久亚洲| 欧美成人午夜剧场免费观看| 69视频在线免费观看| 亚洲色图欧美制服丝袜另类第一页| 国产精品美女www爽爽爽视频| 国产精品成人在线| 深夜福利亚洲导航| 亚洲第一综合天堂另类专| 国内精品国产三级国产在线专| 91av在线视频观看| 日韩在线视频国产| 精品自拍视频在线观看| 免费99精品国产自在在线| 亚洲伦理中文字幕| 日韩在线观看你懂的| 国产一区二区色| 91色视频在线导航| 国产成人av网址| 亚洲日本成人网| 欧美美女操人视频| 6080yy精品一区二区三区| 亚洲日本欧美中文幕| 欧美激情精品久久久久久久变态| 国产主播欧美精品| 91欧美视频网站| 国产精品96久久久久久又黄又硬| 亚洲色图av在线| 欧美刺激性大交免费视频| 日本成人黄色片| 国产精品成久久久久三级| 日韩成人高清在线| 自拍偷拍亚洲欧美| 午夜精品蜜臀一区二区三区免费| 日韩高清免费在线| 北条麻妃在线一区二区| 亚洲欧美日韩在线一区| 7777精品视频| 亚洲一区二区三区香蕉| 欧洲成人在线观看| 亚洲美女www午夜| 激情久久av一区av二区av三区| 国产精品视频色| 成人福利在线观看| 国内外成人免费激情在线视频| 亚洲精品乱码久久久久久金桔影视| 国产精品爽黄69| 久久久国产影院| 欧美日韩国产综合视频在线观看中文| 精品久久久一区| 日韩在线观看免费高清完整版| 国产日韩中文字幕在线| 日韩成人在线观看| 2019亚洲日韩新视频| 亚洲国产精品人久久电影| 久久免费在线观看| 成人乱色短篇合集| 亚洲大胆人体av| 日韩美女在线看| 亚洲国产美女精品久久久久∴| 91成人免费观看网站| 2019亚洲男人天堂| 欧美午夜视频在线观看| 亚洲国产精品一区二区三区| 亚洲区免费影片| 成人在线一区二区| 欧美国产第二页| 亚洲摸下面视频| 欧美日韩视频免费播放| 色偷偷偷综合中文字幕;dd| 一区二区三区精品99久久| 久久亚洲一区二区三区四区五区高| 欧美极度另类性三渗透| 日韩中文字幕在线观看| 最近免费中文字幕视频2019| 国产精品视频一区二区高潮| 黑人与娇小精品av专区| 国产精品久久久精品| 国产成人精品久久| 国产精品久久久久av免费| 国产在线精品自拍| 亚洲人成网7777777国产| 亚洲免费小视频| 久久久女人电视剧免费播放下载| 中文亚洲视频在线| 欧美视频在线观看免费网址| 国产精品亚洲аv天堂网| 久久视频在线观看免费| 亚洲福利视频专区| 全球成人中文在线| www.亚洲天堂| 欧美亚洲一区在线| 中文字幕日韩综合av| 在线成人激情黄色| 国产精品久久9| 欧美亚洲另类在线| 伊人男人综合视频网| 亚洲黄页视频免费观看| 久久精品国产久精国产思思| 久久久亚洲福利精品午夜| 日韩在线精品一区| 国产丝袜视频一区| 亚洲精品福利资源站| 成人观看高清在线观看免费| 欧美日韩成人精品| 亚洲国产精品va在看黑人| 在线国产精品视频| 久久精品国产亚洲一区二区| 国产成人一区二区三区| 欧美午夜女人视频在线| 都市激情亚洲色图| 欧美色图在线视频| 国外视频精品毛片| 91高清视频在线免费观看| 97视频在线观看免费| 国产男女猛烈无遮挡91| 91九色精品视频| 7777免费精品视频| 欧美理论电影在线观看| 亚洲大尺度美女在线| 欧美成人免费va影院高清| 欧美性20hd另类| 最好看的2019年中文视频| 久久视频这里只有精品| 色樱桃影院亚洲精品影院| 欧美有码在线视频| 欧美重口另类videos人妖| 日韩精品小视频| 久久国产精品久久久| 国产香蕉精品视频一区二区三区| 亚洲色图激情小说| 亚洲国产欧美精品| 在线电影av不卡网址| 欧美日韩国产成人| 欧美激情综合色综合啪啪五月| 国产在线拍揄自揄视频不卡99| 国产91精品最新在线播放| 精品一区二区三区四区| 日韩在线免费观看视频| 在线视频日本亚洲性| 国产一区私人高清影院| 欧美激情一区二区三区在线视频观看| 奇米一区二区三区四区久久| 亚洲丝袜av一区| 欧美视频不卡中文| 欧美精品一本久久男人的天堂| 亚洲一区999| 在线精品国产成人综合| 亚洲美女av在线| 成人在线视频网| 亚洲欧美国产精品va在线观看| 亚洲欧美在线免费观看| 亚洲淫片在线视频| 久久成人精品视频| 欧美精品一区二区三区国产精品| 欧美亚州一区二区三区| 清纯唯美日韩制服另类| 国产成人涩涩涩视频在线观看| 欧美成人午夜激情视频| 性色av一区二区三区在线观看| 久久久久久久久久亚洲| 精品国内亚洲在观看18黄| 97久久精品人搡人人玩| 国产999精品| 欧美精品第一页在线播放|