


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、線程安全與共享資源-編程開發(fā)技術(shù)線程安全與共享資源譯文出處:畢冉 原文出處:jakobjenkov允許被多個(gè)線程同時(shí)執(zhí)行的代碼稱作線程安全的代碼。線程安全的代碼不包含競 態(tài)條件。當(dāng)多個(gè)線程同時(shí)更新共享資源時(shí)會(huì)引發(fā)競態(tài)條件。因此,了解j3v3線 程執(zhí)行時(shí)共享了什么資源很重要。局部變量局部變量存儲(chǔ)在線程自己的棧屮。也就是說,局部變量永遠(yuǎn)也不會(huì)被多個(gè)線程共 享。所以,基礎(chǔ)類型的局部變量是線程安全的。下面是基礎(chǔ)類型的局部變量的一 個(gè)例了:public void somemethodo long threadsafelnt 二 0;thrcadsafcint+;局部的對(duì)象引用對(duì)象的局部引用和基礎(chǔ)類型的局
2、部變量不太一樣。盡管引用木身沒有被共享,但 引用所指的對(duì)象并沒冇存儲(chǔ)在線程的棧內(nèi)。所冇的對(duì)象都存在共享堆中。如果在 某個(gè)方法中創(chuàng)建的對(duì)象不會(huì)逃逸出譯者注:即該對(duì)彖不會(huì)被其它方法獲得,也 不會(huì)被非局部變量引用至嘰該方法,那么它就是線程安全的。實(shí)際上,哪怕將這 個(gè)對(duì)象作為參數(shù)傳給其它方法,只要?jiǎng)e的線程獲取不到這個(gè)對(duì)象,那它仍是線程 安全的。下面是一個(gè)線程安全的局部引用樣例:publ ic void somemethodo localobject localobject = new localobject ();localobject. callmethod();method2(localobjec
3、t);public void method2(localobject localobject) localobject. setvalue(value);樣例中l(wèi)ocalobject對(duì)象沒冇被方法返回,也沒冇被傳遞給somemethodo方法 外的對(duì)象。毎個(gè)執(zhí)彳亍somemethod ()的線程都會(huì)創(chuàng)建口己的localobject對(duì)彖, 并賦值給localobject引用。因此,這里的localobject是線程安全的。事實(shí)上, 整個(gè)somemethod ()都是線程安全的。即使將localobject作為參數(shù)傳給同一個(gè) 類的其它方法或其它類的方法時(shí),它仍然是線程安全的。當(dāng)然,如杲localo
4、bject 通過某些方法被傳給了別的線程,那它就不再是線程安全的了。對(duì)象成員對(duì)象成員存儲(chǔ)在堆上。如果兩個(gè)線程同吋更新同一個(gè)對(duì)象的同一個(gè)成員,那這個(gè) 代碼就不是線程安全的。下面是一個(gè)樣例:public class notthreadsafcstringbuilder builder = new stringbuilder();public add(string text) thi s.bui1der. append(text);如果兩個(gè)線程同時(shí)調(diào)用同一個(gè)notthreadsafe實(shí)例上的add ()方法,就會(huì)有競態(tài) 條件問題。例如:notthreadsafe sharedtnstance 二 n
5、ew notthreadsafe();new thread(new myrunnable(sharedlnstance)start();new thread(new nrunnable(sharedlnstance). start();public class myrunnable implements runnablenotthreadsafe i nstance 二 nul1;public myrunnable(notthreadsafe instanee)thisinstance = instance;public void run() this instance add("s
6、ome text");注意兩個(gè)myrunnabl e共享了同一個(gè)notthreadsafe對(duì)象。因此,當(dāng)它們調(diào)用add () 方法時(shí)會(huì)造成競態(tài)條件。當(dāng)然,如果這兩個(gè)線程在不同的notthreadsafe實(shí)例上調(diào)用call ()方法,就不 會(huì)導(dǎo)致競態(tài)條件。下面是稍微修改后的例了:new thread(new myrunnable(new notthreadsafe()start(); new thread(new myrunnable(new notthreadsafe(). start();現(xiàn)在兩個(gè)線程都有自己單獨(dú)的notthreadsafe對(duì)象,調(diào)用add ()方法時(shí)就會(huì)互不 干擾
7、,再也不會(huì)有競態(tài)條件問題了。所以非線程安全的對(duì)象仍叮以通過某種方式 來消除競態(tài)條件。線程控制逃逸規(guī)則線程控制逃逸規(guī)則可以幫助你判斷代碼中對(duì)某些資源的訪問是否是線程安全的。如果一個(gè)資源的創(chuàng)建,使用,銷毀都在同一個(gè)線程內(nèi)完成,且永遠(yuǎn)不會(huì)脫離該線程的控制,則該資源的使用就是線程安全的。資源可以是對(duì)彖,數(shù)組,文件,數(shù)據(jù)庫連接,套接字等等。java中你無需主動(dòng) 銷毀對(duì)彖,所以“銷毀”指不再冇引用指向?qū)﹀?。即使?duì)象本身線程安全,但如果該對(duì)彖中包含其他資源(文件,數(shù)據(jù)庫連接), 整個(gè)應(yīng)用也許就不再是線程安全的了。比如2個(gè)線程都創(chuàng)建了各自的數(shù)據(jù)庫連 接,每個(gè)連接自身是線程安全的,但它們所連接到的同一個(gè)數(shù)據(jù)庫也許不是線程 安全的。比如,2個(gè)線程執(zhí)行如卜代碼:檢查記錄x是否存在,如果不存在,插入x如果兩個(gè)線程同吋執(zhí)行,而且碰巧檢查的是同一個(gè)記錄,那么兩個(gè)線程最終可能 都插入了記錄:線
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國幼兒托管行業(yè)市場調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 中國ERP軟件行業(yè)市場供需現(xiàn)狀及未來發(fā)展趨勢(shì)報(bào)告
- 2025年中國除雪設(shè)備行業(yè)市場全景調(diào)研及投資規(guī)劃建議報(bào)告
- 2025年中國儀表行業(yè)市場前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2025年中國現(xiàn)代農(nóng)業(yè)行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 電機(jī)培訓(xùn)課件圖片
- 轉(zhuǎn)正實(shí)習(xí)報(bào)告
- 2025年中國大米蛋白行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2025年中國微型繼電器行業(yè)競爭格局分析及投資規(guī)劃研究報(bào)告
- 廠房租賃合同
- 膀胱灌注課件完整版
- 給水排水管網(wǎng)系統(tǒng)智慧樹知到答案章節(jié)測(cè)試2023年廣州大學(xué)
- 2022版義務(wù)教育音樂課程標(biāo)準(zhǔn)解讀一PPT
- GB/T 26059-2010鈦及鈦合金網(wǎng)板
- GB/T 19673.2-2013滾動(dòng)軸承套筒型直線球軸承附件第2部分:5系列外形尺寸和公差
- 《士兵突擊》課件
- 蘇教版六年級(jí)科學(xué)下冊(cè)期末考試卷及答案
- 孕產(chǎn)期保健管理及工作規(guī)范(喀什)
- 二、施組報(bào)審表
- 無砟軌道底座板首件施工總結(jié)(最新)
- 油藏?cái)?shù)值模擬中幾種主要的數(shù)學(xué)模型
評(píng)論
0/150
提交評(píng)論