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

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

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

    應(yīng)用,一定要應(yīng)用

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

    2004-10-25

    第八章線程和鎖
    這章描述的是非常底層的jvm運(yùn)作的時(shí)候的概念上的部分模型,與前部分的編譯不屬于一個(gè)層次。
    本章提到的變量概念是指類實(shí)例,類變量,和類數(shù)組。而參數(shù)和局部變量并不強(qiáng)行要求到這個(gè)變量概念之中。
    8。1術(shù)語(yǔ)和框架
    jvm中有主寄存器,當(dāng)一個(gè)線程被啟動(dòng)時(shí),會(huì)創(chuàng)建自己的工作寄存器,當(dāng)線程運(yùn)行,會(huì)對(duì)主寄存器中的數(shù)據(jù)進(jìn)行拷貝,存入自己的工作寄存器中。
    主寄存器包含每個(gè)變量的主拷貝。
    主寄存器也包含鎖,每個(gè)對(duì)象有個(gè)與其相關(guān)的鎖。線程可以競(jìng)爭(zhēng)獲得一個(gè)鎖。
    相關(guān)術(shù)語(yǔ):
    use,assign,load,store,lock,unlock為線程可以執(zhí)行的動(dòng)作。
    read,write,lock,unlock為主存儲(chǔ)器子系統(tǒng)可以執(zhí)行的動(dòng)作。
    use,assign是線程執(zhí)行引擎與工作存儲(chǔ)之間的緊密耦合交互作用。
    lock,unlock是線程執(zhí)行引擎與主存儲(chǔ)之間的緊密耦合交互作用。
    主存儲(chǔ)與工作存儲(chǔ)之間卻是松散耦合的。
    分別對(duì)應(yīng)的動(dòng)作就是:load,store和lock,unlock

    注意有三個(gè)實(shí)體在協(xié)同工作:主存儲(chǔ)器,工作存儲(chǔ)器,線程運(yùn)行引擎

    8。2執(zhí)行順序和一致性。
    1。同線程執(zhí)行動(dòng)作排序
    2、主存儲(chǔ)執(zhí)行的、對(duì)同一變量的動(dòng)作排序
    3、主存儲(chǔ)執(zhí)行的、對(duì)同一鎖的動(dòng)作排序
    4、不允許一個(gè)動(dòng)作跟在其自身后面。

    第4點(diǎn)特殊說(shuō)明:雖然看起來(lái)無(wú)關(guān)緊要,但必須顯式說(shuō)明,以保證完整性。因?yàn)檫@種危險(xiǎn)確實(shí)存在。

    線程的動(dòng)作和主存儲(chǔ)的動(dòng)作間的約束:
    1、每個(gè)lock和unlock動(dòng)作必須由一些線程和主存儲(chǔ)共同執(zhí)行。
    2、每個(gè)load動(dòng)作,唯一的與一個(gè)write動(dòng)作配對(duì),這樣write動(dòng)作跟在store動(dòng)作后。

    8。3有關(guān)變量的規(guī)則

    線程T對(duì)變量V的操作約束:
    1、T執(zhí)行過(guò)程中只有需要相應(yīng)使用V時(shí)才調(diào)用use,或者assign動(dòng)作。
    2、T執(zhí)行的assign動(dòng)作必須插入到T對(duì)V的load或者store和后繼的由T執(zhí)行的對(duì)V的store之間。(保證主存儲(chǔ)內(nèi)值的正確,同時(shí)保證assign動(dòng)作之前工作存儲(chǔ)內(nèi)存在V)
    3、在T對(duì)V執(zhí)行use和store之前,必須執(zhí)行assign或load操作(保證工作存儲(chǔ)器中有V,并且已經(jīng)初始化)
    4、在V創(chuàng)建后,每個(gè)T在use或store之前,必須執(zhí)行assign或load操作。

    對(duì)于第4點(diǎn):volatile(易變)變量有更嚴(yán)格的約束

    由主存儲(chǔ)器執(zhí)行的read和right操作的約束:
    1、T對(duì)V的load,必須先有對(duì)應(yīng)的read
    2、T對(duì)V的store,必須后繼對(duì)應(yīng)的write
    3、動(dòng)作A,B是T對(duì)V的load或store動(dòng)作,P,Q為對(duì)應(yīng)的read或write,如果A優(yōu)先于B,則P必須有些于Q
    ?
    8.4Double和long變量的非原子處理
    由于32位機(jī)器的效率問(wèn)題,有些jvm實(shí)現(xiàn)對(duì)double和long這種64位值操作是非原子的,導(dǎo)致一些同步問(wèn)題(如程序員總是需要顯式指定同步于對(duì)double和long上的操作),其實(shí)這只是一種軟件設(shè)計(jì)對(duì)硬件的妥協(xié)而已。

    8。5有關(guān)鎖的規(guī)則
    線程為T,鎖為L(zhǎng),T執(zhí)行的關(guān)于L的操作約束如下:
    1、T對(duì)L的lock操作,必須對(duì)于每個(gè)不是T的線程S,S對(duì)L的unlock操作數(shù)等于之前的S對(duì)L的lock操作數(shù)
    2、T對(duì)L的unlock操作,必須要求先前T對(duì)L的unlock操作數(shù),小于先前T對(duì)L的lock操作數(shù)(不解不擁有的鎖)

    8。6有關(guān)鎖和變量交互作用的規(guī)則
    線程T,鎖L,變量V,T執(zhí)行的關(guān)于L和V的操作約束如下:
    1、在t對(duì)V的assign和隨后的unlock之間,必須插入store操作。對(duì)應(yīng)于該store的write操作必須先于unlock操作(保證L對(duì)于V的有效性)。
    2、在lock和隨后執(zhí)行的use或store之間,必須插入assign或load操作。

    8。7有關(guān)volatile(易變)變量的規(guī)則
    線程T,易變變量V和W
    1、load和use操作必須成對(duì)出現(xiàn),緊挨在一起,并且load操作在前
    2、assign和store操作必須成對(duì)出現(xiàn),緊挨在一起,并且assign操作在前
    3、A、B為T對(duì)V的use或assign,F、G為對(duì)應(yīng)的load或store,P、Q為對(duì)應(yīng)的read或write,如果A先于B,則P必須優(yōu)先于Q。

    8。8先見(jiàn)存儲(chǔ)操作
    如果變量沒(méi)有聲明為violate,則store操作可以提前于assign,store操作將將要賦給V的值替代V實(shí)際的值進(jìn)行store操作,只要滿足:
    1、如果發(fā)生store,必然發(fā)生assign。
    2、重定位的store和assign間未插入鎖定操作。
    3、重定位的store和assign間未插入對(duì)V的load
    4、重定位的store和assign間未插入其他對(duì)V的store
    5、store操作將assign操作要放到線程T的Z作為存儲(chǔ)器中的值傳到主存儲(chǔ)器。

    8。9討論

    8。10可能的交換
    一個(gè)關(guān)于同步和鎖的小例子。

    8。11范例:無(wú)序?qū)?br />另一個(gè)例子

    8。12線程
    線程由Thread和ThreadGroup類創(chuàng)建并管理。創(chuàng)建Thread對(duì)象就創(chuàng)建一個(gè)線程,而且是創(chuàng)建線程的唯一方式。當(dāng)線程被創(chuàng)建時(shí),它還不是活躍的,當(dāng)其start方法被調(diào)用時(shí),開(kāi)始運(yùn)行。

    8。13鎖和同步
    每個(gè)對(duì)象都有與其關(guān)聯(lián)的鎖。
    當(dāng)synchronized方法被調(diào)用時(shí),它自動(dòng)執(zhí)行鎖定操作;如果該方法是實(shí)例方法,它鎖定同實(shí)例相關(guān)聯(lián)的鎖,如果方法是static的,它鎖定同Class對(duì)象相關(guān)聯(lián)的鎖

    8。13等待集和通知
    每個(gè)對(duì)象除了相關(guān)的鎖外,還有相關(guān)的等待集,即一組線程,首次創(chuàng)建的對(duì)象,等待集為空。
    講述了wait,notify,notifyall幾個(gè)方法,wait方法往等待集中增加內(nèi)容,而notify或notifyall方法從等待集中刪除內(nèi)容。
    但不能完全讀懂內(nèi)容,可細(xì)研究。

    第九章優(yōu)化
    本章描述jvm中Sun版本中實(shí)現(xiàn)的優(yōu)化。
    在此優(yōu)化中,編譯的jvm代碼在運(yùn)行期修改,利用運(yùn)行期獲得的信息,做比源指令更少的工作,以獲得更好的性能。

    9。1通過(guò)重寫(xiě)動(dòng)態(tài)鏈接
    對(duì)重寫(xiě)的指令,指令的每個(gè)實(shí)例在其第一次執(zhí)行時(shí)被替換為_(kāi)quick偽指令,該指令實(shí)例隨后執(zhí)行的總是_quick變體。
    其余是對(duì)_quick偽指令的描述,可用于查閱,因?yàn)檫@是Sun的jdk在運(yùn)行的時(shí)候的真正指令狀態(tài)。

    第十章 操作碼的操作碼助記符
    這章主要是個(gè)附錄的功能,可供查閱。


    ×××××××××××××××××××××××××××××××××××
    在延期了將近一個(gè)月了之后,終于算是看過(guò)了一遍這本書(shū),雖然有很多沒(méi)有看的非常明白的地方,但是比我預(yù)期的效果要好了許多了,進(jìn)一步的細(xì)致研究可以安排在后面。

    posted on 2006-08-24 17:07 flyffa 閱讀(1325) 評(píng)論(0)  編輯  收藏 所屬分類: 讀書(shū)
    主站蜘蛛池模板: 国产精品成人免费视频网站京东| 巨胸喷奶水www永久免费| 91大神免费观看| 亚洲∧v久久久无码精品| 国产免费一区二区三区在线观看 | 亚洲国产夜色在线观看| 18禁美女裸体免费网站| 亚洲色偷偷av男人的天堂| 59pao成国产成视频永久免费| 337p日本欧洲亚洲大胆艺术| 中文字幕在线观看免费视频| 99视频免费观看| 亚洲国产成+人+综合| 天天摸夜夜摸成人免费视频| 含羞草国产亚洲精品岁国产精品| 四虎影视在线永久免费观看| 人成电影网在线观看免费| 国产亚洲精品xxx| 精品女同一区二区三区免费站| 91亚洲视频在线观看| 青青青国产免费一夜七次郎 | 99麻豆久久久国产精品免费| 亚洲成AV人在线观看天堂无码| 久久久久国产精品免费免费不卡 | 国产精品亚洲一区二区无码| 亚洲精品国产自在久久| 国产免费一区二区视频| 亚洲永久中文字幕在线| 四虎影院免费在线播放| 无码 免费 国产在线观看91| 久久亚洲精品国产精品黑人| 在线观看无码AV网站永久免费 | 久久美女网站免费| 亚洲人成黄网在线观看| 免费国产成人高清视频网站| 曰批全过程免费视频在线观看无码 | 亚洲成人午夜电影| 亚洲AV无码一区二三区| 18禁美女裸体免费网站| 特级毛片爽www免费版| 亚洲人成网站18禁止久久影院|