<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    狂奔 lion

    自強不息

    2010年7月9日

    淺談Java中的同步的方法和原理

    Java的內存模型中Thread會附有自己的堆棧,寄存器,必要時需要和主存即heap之間同步。
    可以使用Synchornized關鍵字和Concurrent包中的Lock可以保證線程互斥和可見性。

    互斥性體現在類鎖或者對象鎖上,每個對象自身都包含一個監視器,該監視器是一個每次只能被一個線程所獲取進入的臨界區,可以通過wait和notify來退出和準入臨界區。可以看出這是一個生產者-消費者的模型。而Concurrent包中的Lock為了能夠獲得更好的性能和更好的擴展性,以及不依賴于關鍵字的可讀代碼,自己實現了這樣一個生產消費隊列,也就是AbstractQueuedSynchronizer,被稱為AQS的機制。每個Lock都內置了一個AbstractQueuedSynchronizer。需要說明的是AbstractQueuedSynchronizer內部實現采用了CAS機制,通過getState, setState, compareAndSetState訪問控制一個32bit int的形式進行互斥。

    那么可見性是如何保證的呢?

    對于關鍵字的同步機制,其實可見性就是線程和主存之間的同步時機問題。共有4個時間點需要注意:
    1 獲取或釋放類鎖/對象鎖的時候。Thread保證reload/flush全部變更
    2 volatile就是flush on write或者reload on read
    3 當線程首次訪問共享變量時,可以得到最新的結果。
    題外:所以在構造方法中公布this時很危險的。簡單的說,就是構造時不逃脫任何變量,不開啟新的線程,只做封裝。關于安全構造,請參考
    http://www.ibm.com/developerworks/cn/java/j-jtp0618/#resources
    4 線程結束時,所有變更會寫回主存

    關于Concurrent Lock如何實現可見性的問題,Doug Lea大俠,只在他的論文中提到,按照JSR133,Unsafe在getState, setState, compareAndSetState時保證了線程的變量的可見性,不需要額外的volatile支持,至于具體這些native做了哪些magic就不得而知了,總之,最后的contract就是保證lock區間的共享變量可見性。開發團隊被逼急了就這樣回答:
    There seems to be a real reluctance to explain the dirty details. I think the question was definitely understood on the concurrent interest thread, and the answer is that synchronized and concurrent locking are intended to be interchangable in terms of memory semantics when implemented correctly. The answer to matfud's question seems to be "trust us.”

    不過這個地方的確是開發團隊給我們用戶迷惑的地方,在同樣應用了CAS機制的Atomic類中,都內嵌了volatile變量,但是再lock塊中,他告訴我們可以保證可見性。

    感興趣的同學可以下面的兩個thread和Doug Lea的thesis:
    http://altair.cs.oswego.edu/pipermail/concurrency-interest/2005-June/001587.html
    http://forums.sun.com/thread.jspa?threadID=631014&start=15&tstart=0
    http://gee.cs.oswego.edu/dl/papers/aqs.pdf

    posted @ 2010-07-09 19:49 楊一 閱讀(1859) | 評論 (0)編輯 收藏

    <2010年7月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    公告

    本人在blogjava上發表的文章及隨筆除特別聲明外均為原創或翻譯,作品受知識產權法保護并被授權遵從 知識分享協議:署名-非商業性使用-相同方式共享 歡迎轉載,請在轉載時注明作者姓名(楊一)及出處(www.tkk7.com/yangyi)
    /////////////////////////////////////////
    我的訪問者

    常用鏈接

    留言簿(5)

    隨筆分類(55)

    隨筆檔案(55)

    相冊

    Java

    其他技術

    生活

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    自強不息


    用心 - 珍惜時間,勇于創造
    主站蜘蛛池模板: 久久亚洲综合色一区二区三区| 亚洲国产精品日韩在线| 国产gv天堂亚洲国产gv刚刚碰| 亚洲精品蜜夜内射| 免费网站看v片在线香蕉| 7777久久亚洲中文字幕| 全免费a级毛片免费看无码| 最新亚洲人成无码网www电影| 国产免费观看网站| 一区二区三区在线免费| 国产精品亚洲A∨天堂不卡| 久久大香香蕉国产免费网站| 久久av无码专区亚洲av桃花岛| 国产在线jyzzjyzz免费麻豆| 亚洲欧洲av综合色无码| 国产高清免费在线| 亚洲精品视频免费观看| 婷婷久久久亚洲欧洲日产国码AV| a拍拍男女免费看全片| 亚洲中文字幕无码不卡电影| 在线观看特色大片免费网站| 亚洲av日韩片在线观看| 国产一区二区三区免费观在线 | 午夜影院免费观看| 亚洲国产美女福利直播秀一区二区| 99在线精品免费视频九九视| 亚洲第一综合天堂另类专| 亚洲中文字幕丝袜制服一区| 久久国产免费观看精品3| 亚洲男人天堂2022| 亚洲午夜精品久久久久久浪潮| 日韩精品在线免费观看| 四虎亚洲精品高清在线观看| 国产L精品国产亚洲区久久| 1000部拍拍拍18勿入免费视频下载 | 亚洲国产成人无码AV在线| 伊人婷婷综合缴情亚洲五月| 在线免费观看亚洲| 国产AV日韩A∨亚洲AV电影 | 最近中文字幕mv免费高清电影 | 岛国精品一区免费视频在线观看|