<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ū)
    主站蜘蛛池模板: 一级特黄录像免费播放肥| 久久久久久久岛国免费播放| 亚洲精品人成无码中文毛片| 久久er国产精品免费观看2| 亚洲精品中文字幕麻豆| 精品国产麻豆免费网站| 免费一区二区无码东京热| 亚洲性色成人av天堂| 亚洲v国产v天堂a无码久久| 久久国产免费一区二区三区| 国产精品久久久久久亚洲影视| 精品久久久久久亚洲| 免费人成在线视频| 国产在线观看免费av站| 亚洲欧美第一成人网站7777| 亚洲不卡中文字幕无码| 国产一级一片免费播放| 成年黄网站色大免费全看| 精品一区二区三区高清免费观看| 亚洲人成图片网站| 亚洲国产成人精品不卡青青草原| 免费一级做a爰片久久毛片潮喷| 在免费jizzjizz在线播| 中文字幕在线视频免费观看| 亚洲AV色欲色欲WWW| 亚洲免费人成视频观看| 婷婷久久久亚洲欧洲日产国码AV| 免费一看一级毛片人| 国拍在线精品视频免费观看| 久久狠狠躁免费观看2020| 一区二区三区免费在线视频 | 亚洲精品福利视频| 亚洲精品网站在线观看不卡无广告 | 久久精品夜色噜噜亚洲A∨| 日本免费中文字幕在线看| 免费无码VA一区二区三区| 两性色午夜视频免费网| 特级毛片爽www免费版| 亚洲AV无码一区二区三区久久精品| 久久精品国产亚洲精品2020| 亚洲国产一二三精品无码|