張孝祥多線(xiàn)程文檔

張孝祥多線(xiàn)程文檔

ID:20811811

大?。?79.00 KB

頁(yè)數(shù):14頁(yè)

時(shí)間:2018-10-15

張孝祥多線(xiàn)程文檔_第1頁(yè)
張孝祥多線(xiàn)程文檔_第2頁(yè)
張孝祥多線(xiàn)程文檔_第3頁(yè)
張孝祥多線(xiàn)程文檔_第4頁(yè)
張孝祥多線(xiàn)程文檔_第5頁(yè)
資源描述:

《張孝祥多線(xiàn)程文檔》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、北京傳智播客教育www.itcast.cn傳統(tǒng)線(xiàn)程機(jī)制的回顧創(chuàng)建線(xiàn)程的兩種傳統(tǒng)方式在Thread子類(lèi)覆蓋的run方法中編寫(xiě)運(yùn)行代碼涉及一個(gè)以往知識(shí)點(diǎn):能否在run方法聲明上拋出InterruptedException異常,以便省略run方法內(nèi)部對(duì)Thread.sleep()語(yǔ)句的try…catch處理?在傳遞給Thread對(duì)象的Runnable對(duì)象的run方法中編寫(xiě)代碼總結(jié):查看Thread類(lèi)的run()方法的源代碼,可以看到其實(shí)這兩種方式都是在調(diào)用Thread對(duì)象的run方法,如果Thread類(lèi)的

2、run方法沒(méi)有被覆蓋,并且為該Thread對(duì)象設(shè)置了一個(gè)Runnable對(duì)象,該run方法會(huì)調(diào)用Runnable對(duì)象的run方法。問(wèn)題:如果在Thread子類(lèi)覆蓋的run方法中編寫(xiě)了運(yùn)行代碼,也為T(mén)hread子類(lèi)對(duì)象傳遞了一個(gè)Runnable對(duì)象,那么,線(xiàn)程運(yùn)行時(shí)的執(zhí)行代碼是子類(lèi)的run方法的代碼?還是Runnable對(duì)象的run方法的代碼?涉及到的一個(gè)以往知識(shí)點(diǎn):匿名內(nèi)部類(lèi)對(duì)象的構(gòu)造方法如何調(diào)用父類(lèi)的非默認(rèn)構(gòu)造方法。定時(shí)器的應(yīng)用Timer類(lèi)TimerTask類(lèi)北京傳智播客教育www.itcast.

3、cn線(xiàn)程的同步互斥與通信使用synchronized代碼塊及其原理使用synchronized方法分析靜態(tài)方法所使用的同步監(jiān)視器對(duì)象是什么?wait與notify實(shí)現(xiàn)線(xiàn)程間的通信北京傳智播客教育www.itcast.cn線(xiàn)程的同步互斥的圖文解說(shuō)北京傳智播客教育www.itcast.cn多個(gè)線(xiàn)程訪問(wèn)共享對(duì)象和數(shù)據(jù)的方式如果每個(gè)線(xiàn)程執(zhí)行的代碼相同,可以使用同一個(gè)Runnable對(duì)象,這個(gè)Runnable對(duì)象中有那個(gè)共享數(shù)據(jù),例如,買(mǎi)票系統(tǒng)就可以這么做。如果每個(gè)線(xiàn)程執(zhí)行的代碼不同,這時(shí)候需要用不同的Run

4、nable對(duì)象,有如下兩種方式來(lái)實(shí)現(xiàn)這些Runnable對(duì)象之間的數(shù)據(jù)共享:將共享數(shù)據(jù)封裝在另外一個(gè)對(duì)象中,然后將這個(gè)對(duì)象逐一傳遞給各個(gè)Runnable對(duì)象。每個(gè)線(xiàn)程對(duì)共享數(shù)據(jù)的操作方法也分配到那個(gè)對(duì)象身上去完成,這樣容易實(shí)現(xiàn)針對(duì)該數(shù)據(jù)進(jìn)行的各個(gè)操作的互斥和通信。將這些Runnable對(duì)象作為某一個(gè)類(lèi)中的內(nèi)部類(lèi),共享數(shù)據(jù)作為這個(gè)外部類(lèi)中的成員變量,每個(gè)線(xiàn)程對(duì)共享數(shù)據(jù)的操作方法也分配給外部類(lèi),以便實(shí)現(xiàn)對(duì)共享數(shù)據(jù)進(jìn)行的各個(gè)操作的互斥和通信,作為內(nèi)部類(lèi)的各個(gè)Runnable對(duì)象調(diào)用外部類(lèi)的這些方法。上面兩

5、種方式的組合:將共享數(shù)據(jù)封裝在另外一個(gè)對(duì)象中,每個(gè)線(xiàn)程對(duì)共享數(shù)據(jù)的操作方法也分配到那個(gè)對(duì)象身上去完成,對(duì)象作為這個(gè)外部類(lèi)中的成員變量或方法中的局部變量,每個(gè)線(xiàn)程的Runnable對(duì)象作為外部類(lèi)中的成員內(nèi)部類(lèi)或局部?jī)?nèi)部類(lèi)??傊?,要同步互斥的幾段代碼最好是分別放在幾個(gè)獨(dú)立的方法中,這些方法再放在同一個(gè)類(lèi)中,這樣比較容易實(shí)現(xiàn)它們之間的同步互斥和通信。極端且簡(jiǎn)單的方式,即在任意一個(gè)類(lèi)中定義一個(gè)static的變量,這將被所有線(xiàn)程共享。北京傳智播客教育www.itcast.cnThreadLocal實(shí)現(xiàn)線(xiàn)程范圍

6、的共享變量見(jiàn)下頁(yè)的示意圖和輔助代碼解釋ThreadLocal的作用和目的:用于實(shí)現(xiàn)線(xiàn)程內(nèi)的數(shù)據(jù)共享,即對(duì)于相同的程序代碼,多個(gè)模塊在同一個(gè)線(xiàn)程中運(yùn)行時(shí)要共享一份數(shù)據(jù),而在另外線(xiàn)程中運(yùn)行時(shí)又共享另外一份數(shù)據(jù)。每個(gè)線(xiàn)程調(diào)用全局ThreadLocal對(duì)象的set方法,就相當(dāng)于往其內(nèi)部的map中增加一條記錄,key分別是各自的線(xiàn)程,value是各自的set方法傳進(jìn)去的值。在線(xiàn)程結(jié)束時(shí)可以調(diào)用ThreadLocal.clear()方法,這樣會(huì)更快釋放內(nèi)存,不調(diào)用也可以,因?yàn)榫€(xiàn)程結(jié)束后也可以自動(dòng)釋放相關(guān)的Thr

7、eadLocal變量。ThreadLocal的應(yīng)用場(chǎng)景:訂單處理包含一系列操作:減少庫(kù)存量、增加一條流水臺(tái)賬、修改總賬,這幾個(gè)操作要在同一個(gè)事務(wù)中完成,通常也即同一個(gè)線(xiàn)程中進(jìn)行處理,如果累加公司應(yīng)收款的操作失敗了,則應(yīng)該把前面的操作回滾,否則,提交所有操作,這要求這些操作使用相同的數(shù)據(jù)庫(kù)連接對(duì)象,而這些操作的代碼分別位于不同的模塊類(lèi)中。銀行轉(zhuǎn)賬包含一系列操作:把轉(zhuǎn)出帳戶(hù)的余額減少,把轉(zhuǎn)入帳戶(hù)的余額增加,這兩個(gè)操作要在同一個(gè)事務(wù)中完成,它們必須使用相同的數(shù)據(jù)庫(kù)連接對(duì)象,轉(zhuǎn)入和轉(zhuǎn)出操作的代碼分別是兩個(gè)不

8、同的帳戶(hù)對(duì)象的方法。例如Strut2的ActionContext,同一段代碼被不同的線(xiàn)程調(diào)用運(yùn)行時(shí),該代碼操作的數(shù)據(jù)是每個(gè)線(xiàn)程各自的狀態(tài)和數(shù)據(jù),對(duì)于不同的線(xiàn)程來(lái)說(shuō),getContext方法拿到的對(duì)象都不相同,對(duì)同一個(gè)線(xiàn)程來(lái)說(shuō),不管調(diào)用getContext方法多少次和在哪個(gè)模塊中g(shù)etContext方法,拿到的都是同一個(gè)。實(shí)驗(yàn)案例:定義一個(gè)全局共享的ThreadLocal變量,然后啟動(dòng)多個(gè)線(xiàn)程向該ThreadLocal變量中存儲(chǔ)一個(gè)隨機(jī)值,接著各個(gè)線(xiàn)程調(diào)用另外其他多個(gè)類(lèi)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。