張孝祥多線程文檔_第1頁
張孝祥多線程文檔_第2頁
張孝祥多線程文檔_第3頁
張孝祥多線程文檔_第4頁
張孝祥多線程文檔_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

北京傳智播客教育傳統(tǒng)線程機制的回顧創(chuàng)建線程的兩種傳統(tǒng)方式在Thread子類覆蓋的run方法中編寫運行代碼涉及一個以往知識點:能否在run方法聲明上拋出InterruptedException異常,以便省略run方法內(nèi)部對Thread.sleep()語句的try…catch處理?在傳遞給Thread對象的Runnable對象的run方法中編寫代碼總結(jié):查看Thread類的run()方法的源代碼,可以看到其實這兩種方式都是在調(diào)用Thread對象的run方法,如果Thread類的run方法沒有被覆蓋,并且為該Thread對象設(shè)置了一個Runnable對象,該run方法會調(diào)用Runnable對象的run方法。問題:如果在Thread子類覆蓋的run方法中編寫了運行代碼,也為Thread子類對象傳遞了一個Runnable對象,那么,線程運行時的執(zhí)行代碼是子類的run方法的代碼?還是Runnable對象的run方法的代碼?涉及到的一個以往知識點:匿名內(nèi)部類對象的構(gòu)造方法如何調(diào)用父類的非默認(rèn)構(gòu)造方法。定時器的應(yīng)用Timer類TimerTask類北京傳智播客教育線程的同步互斥與通信使用synchronized代碼塊及其原理使用synchronized方法分析靜態(tài)方法所使用的同步監(jiān)視器對象是什么?wait與notify實現(xiàn)線程間的通信北京傳智播客教育線程的同步互斥的圖文解說北京傳智播客教育多個線程訪問共享對象和數(shù)據(jù)的方式如果每個線程執(zhí)行的代碼相同,可以使用同一個Runnable對象,這個Runnable對象中有那個共享數(shù)據(jù),例如,買票系統(tǒng)就可以這么做。如果每個線程執(zhí)行的代碼不同,這時候需要用不同的Runnable對象,有如下兩種方式來實現(xiàn)這些Runnable對象之間的數(shù)據(jù)共享:將共享數(shù)據(jù)封裝在另外一個對象中,然后將這個對象逐一傳遞給各個Runnable對象。每個線程對共享數(shù)據(jù)的操作方法也分配到那個對象身上去完成,這樣容易實現(xiàn)針對該數(shù)據(jù)進行的各個操作的互斥和通信。將這些Runnable對象作為某一個類中的內(nèi)部類,共享數(shù)據(jù)作為這個外部類中的成員變量,每個線程對共享數(shù)據(jù)的操作方法也分配給外部類,以便實現(xiàn)對共享數(shù)據(jù)進行的各個操作的互斥和通信,作為內(nèi)部類的各個Runnable對象調(diào)用外部類的這些方法。上面兩種方式的組合:將共享數(shù)據(jù)封裝在另外一個對象中,每個線程對共享數(shù)據(jù)的操作方法也分配到那個對象身上去完成,對象作為這個外部類中的成員變量或方法中的局部變量,每個線程的Runnable對象作為外部類中的成員內(nèi)部類或局部內(nèi)部類??傊?,要同步互斥的幾段代碼最好是分別放在幾個獨立的方法中,這些方法再放在同一個類中,這樣比較容易實現(xiàn)它們之間的同步互斥和通信。極端且簡單的方式,即在任意一個類中定義一個static的變量,這將被所有線程共享。北京傳智播客教育ThreadLocal實現(xiàn)線程范圍的共享變量見下頁的示意圖和輔助代碼解釋ThreadLocal的作用和目的:用于實現(xiàn)線程內(nèi)的數(shù)據(jù)共享,即對于相同的程序代碼,多個模塊在同一個線程中運行時要共享一份數(shù)據(jù),而在另外線程中運行時又共享另外一份數(shù)據(jù)。每個線程調(diào)用全局ThreadLocal對象的set方法,就相當(dāng)于往其內(nèi)部的map中增加一條記錄,key分別是各自的線程,value是各自的set方法傳進去的值。在線程結(jié)束時可以調(diào)用ThreadLocal.clear()方法,這樣會更快釋放內(nèi)存,不調(diào)用也可以,因為線程結(jié)束后也可以自動釋放相關(guān)的ThreadLocal變量。ThreadLocal的應(yīng)用場景:訂單處理包含一系列操作:減少庫存量、增加一條流水臺賬、修改總賬,這幾個操作要在同一個事務(wù)中完成,通常也即同一個線程中進行處理,如果累加公司應(yīng)收款的操作失敗了,則應(yīng)該把前面的操作回滾,否則,提交所有操作,這要求這些操作使用相同的數(shù)據(jù)庫連接對象,而這些操作的代碼分別位于不同的模塊類中。銀行轉(zhuǎn)賬包含一系列操作:把轉(zhuǎn)出帳戶的余額減少,把轉(zhuǎn)入帳戶的余額增加,這兩個操作要在同一個事務(wù)中完成,它們必須使用相同的數(shù)據(jù)庫連接對象,轉(zhuǎn)入和轉(zhuǎn)出操作的代碼分別是兩個不同的帳戶對象的方法。例如Strut2的ActionContext,同一段代碼被不同的線程調(diào)用運行時,該代碼操作的數(shù)據(jù)是每個線程各自的狀態(tài)和數(shù)據(jù),對于不同的線程來說,getContext方法拿到的對象都不相同,對同一個線程來說,不管調(diào)用getContext方法多少次和在哪個模塊中g(shù)etContext方法,拿到的都是同一個。實驗案例:定義一個全局共享的ThreadLocal變量,然后啟動多個線程向該ThreadLocal變量中存儲一個隨機值,接著各個線程調(diào)用另外其他多個類的方法,這多個類的方法中讀取這個ThreadLocal變量的值,就可以看到多個類在同一個線程中共享同一份數(shù)據(jù)。實現(xiàn)對ThreadLocal變量的封裝,讓外界不要直接操作ThreadLocal變量。對基本類型的數(shù)據(jù)的封裝,這種應(yīng)用相對很少見。對對象類型的數(shù)據(jù)的封裝,比較常見,即讓某個類針對不同線程分別創(chuàng)建一個獨立的實例對象。北京傳智播客教育線程范圍內(nèi)共享數(shù)據(jù)的示意圖變量或表達式對象與模塊A變量或表達式對象與模塊B變量或表達式對象與模塊C線程1線程2線程1綁定的數(shù)據(jù)線程2綁定的數(shù)據(jù)北京傳智播客教育Java5中的線程并發(fā)庫看包及子包的API幫助文檔了解包查看atomic包文檔頁下面的介紹通過如下兩個方法快速理解atomic包的意義:AtomicInteger類的booleancompareAndSet(expectedValue,updateValue);AtomicIntegerArray類的intaddAndGet(int

i,int

delta);順帶解釋volatile類型的作用,需要查看java語言規(guī)范。了解包在下頁通過案例詳細講解北京傳智播客教育線程池線程池的概念與Executors類的應(yīng)用創(chuàng)建固定大小的線程池創(chuàng)建緩存線程池創(chuàng)建單一線程池關(guān)閉線程池shutdown與shutdownNow的比較用線程池啟動定時器調(diào)用ScheduledExecutorService的schedule方法,返回的ScheduleFuture對象可以取消任務(wù)。支持間隔重復(fù)任務(wù)的定時方式,不直接支持絕對定時方式,需要轉(zhuǎn)換成相對時間方式。北京傳智播客教育Callable&FutureFuture取得的結(jié)果類型和Callable返回的結(jié)果類型必須一致,這是通過泛型來實現(xiàn)的。Callable要采用ExecutorSevice的submit方法提交,返回的future對象可以取消任務(wù)。CompletionService用于提交一組Callable任務(wù),其take方法返回已完成的一個Callable任務(wù)對應(yīng)的Future對象。好比我同時種了幾塊地的麥子,然后就等待收割。收割時,則是那塊先成熟了,則先去收割哪塊麥子。北京今傳智愚播客址教育Lo蹦ck貿(mào)&C鋸on烏di秧ti蝦on軋實現(xiàn)嚷線程寇同步屯通信Lo鋸ck錯比傳兔統(tǒng)線岡程模賠型中搬的s朋yn治ch守ro撤ni點ze劈燕d方照式更威加面顏向?qū)肯?,跟與生挑活中幼的鎖漆類似亞,鎖出本身跡也應(yīng)愈該是短一個揮對象幼。兩戀個線踏程執(zhí)脫行的續(xù)代碼迎片段溜要實洞現(xiàn)同碌步互回斥的構(gòu)效果出,它煤們必扣須用瞧同一昌個L緊oc晶k對嗓象。讀寫掠鎖:喇分為壇讀鎖禽和寫叢鎖,堵多個預(yù)讀鎖楚不互們斥,忘讀鎖載與寫傭鎖互部斥,拜這是忘由j牽vm毛自己牙控制百的,沖你只焰要上山好相鄭應(yīng)的年鎖即倆可。少如果絲式你的錯代碼與只讀筍數(shù)據(jù)敏,可零以很佩多人遼同時拌讀,同但不堆能同遣時寫胳,那剖就上鉆讀鎖選;如冬果你股的代息碼修渴改數(shù)光據(jù),軟只能唉有一占個人奇在寫約,且超不能箭同時散讀取繼,那廢就上孔寫鎖抬??傆柚x的暑時候勤上讀冒鎖,耗寫的聾時候籌上寫洞鎖!在等釣待匆Co錦nd鄭it汪io評n虛時,屈允許裁發(fā)生幸“虛畏假喚潑醒”袖,這號通常劃作為熱對基融礎(chǔ)平碎臺語疼義的彩讓步賤。對尋于大蜘多數(shù)瞎應(yīng)用催程序撫,這蛇帶來詞的實邊際影畫響很欺小,柳因為改C涼on無di予ti悉on組應(yīng)芝該總厘是在千一個獻循環(huán)衫中被序等待辰,并霧測試歌正被脫等待便的狀狠態(tài)聲商明。霉某個往實現(xiàn)旨可以飾隨意負(fù)移除??赡芩愕奶撡Q(mào)假喚占醒,格但建河議應(yīng)縱用程貫序程退序員飛總是出假定五這些辦虛假且喚醒騙可能竊發(fā)生粗,因慶此總償是在躬一個斯循環(huán)閱中等偶待。一個啦鎖內(nèi)豆部可周以有災(zāi)多個殼Co堪nd降it寺io允n,努即有初多路敢等待饞和通厘知,媽可以孤參看犬jd托k1芹.5涼提供纏的L坊oc嘩k與療Co攝nd遷it杯io滋n實另現(xiàn)的籃可阻棗塞隊棒列的隙應(yīng)用滲案例矮,從軍中除跪了要糖體味揉算法旦,還欲要體稠味面抖向?qū)逑蟮呐D封裝雀。在炒傳統(tǒng)團的線季程機包制中暖一個貢監(jiān)視哄器對篇象上匙只能鈔有一宿路等民待和城通知去,要駐想實速現(xiàn)多岡路等央待和艘通知怨,必嫁須嵌旦套使恥用多及個同誘步監(jiān)乏視器妻對象嶼。(蔽如果木只用霸一個個Co藥nd剛it慣io字n,點兩個藏放的汁都在亞等,縱一旦愁一個從放的盲進去毒了,越那么室它通距知可拳能會劃導(dǎo)致編另一軌個放膽接著驢往下賞走。垃)北京溪傳智寧播客本教育Se謎ma賀ph為or倒e實智現(xiàn)信澡號燈Se錯ma什ph趙or認(rèn)e可銜以維物護當(dāng)片前訪母問自劈燕身的蛋線程夜個數(shù)抱,并楊提供萍了同剃步機愧制。摩使用稀Se軌ma戰(zhàn)ph少or夸e可員以控淺制同績時訪槽問資請源的宵線程棗個數(shù)斬,例極如,猶實現(xiàn)位一個郊文件盟允許亭的并租發(fā)訪統(tǒng)問數(shù)失。Se忍ma睛ph機or鴿e實換現(xiàn)的岔功能抹就類璃似廁已所有次5個棗坑,南假如蛙有十知個人孕要上淋廁所巡壽,那滅么同臟時能膨有多柄少個鑼人去拼上廁壺所呢養(yǎng)?同賀時只黎能有博5個哭人能旗夠占鹿用,紛當(dāng)5嚼個人闊中的謊任何僻一個蘿人讓懷開后酒,其灰中在泥等待秤的另孔外5源個人闊中又筑有一堵個可毅以占毀用了昂。另外攀等待曉的5罪個人喂中可秒以是蟲隨機青獲得宰優(yōu)先示機會金,也陵可以沫是按及照先磨來后這到的租順序嘉獲得善機會雁,這祥取決睜于構(gòu)宣造S謠em仗ap增ho尚re對象輩時傳摸入的至參數(shù)磨選項桑。單個遲信號男量的Se毀ma豎ph榜or忙e對冠象可籃以實概現(xiàn)互骨斥鎖柄的功脈能,渡并且授可以寺是由柴一個板線程艱獲得蛛了“情鎖”剃,再創(chuàng)由另焦一個每線程胡釋放物“鎖攪”,遷這可胖應(yīng)用鉤于死即鎖恢匠復(fù)的語一些扛場合段。北京猛傳智虹播客寬教育其他篇同步保工具趟類Cy綿cl僑ic丙Ba煮rr魔ie竹r表示竿大家佛彼此搖等待物,大普家集王合好尊后才茫開始坡出發(fā)臥,分基散活殿動后艱又在舟指定罰地點鄉(xiāng)豐集合輸碰面褲,這范就好鉗比整嚷個公怎司的貍?cè)藛T秒利用搏周末簽時間擊集體假郊游慰一樣只,先貌各自各從家墳出發(fā)幕到公肝司集出合后抄,再法同時企出發(fā)匠到公姜園游氏玩,厭在指帥定地弊點集槽合后校再同嚴(yán)時開臭始就缺餐,通…。Co旦un晴tD乘ow旁nL吉at久ch猶如舅倒計后時計疾數(shù)器燦,調(diào)逃用C魂ou柔nt陰Do鍵wn仆La脫tc升h對倘象的閘co憶un棄tD晉ow孔n方泄法就揮將計文數(shù)器幸減1郊,當(dāng)個計數(shù)屈到達票0時腎,則疏所有席等待麻者或某單個牛等待娃者開多始執(zhí)論行。臟這直融接通呼過代稱碼來伏說明絞Co疾un柱tD遵ow首nL賀at之ch順的作溜用,證這樣輸學(xué)員稼的理位解效端果更詳直接絕??梢耘鰧崿F(xiàn)萌一個獲人(絕也可艘以是盤多個癥人)夏等待少其他構(gòu)所有絨人都六來通料知他噴,這糾猶如撈一個背計劃典需要抄多個潛領(lǐng)導(dǎo)嬸都簽蠶字后梁才能膏繼續(xù)閣向下孫實施須。還掀可以亡實現(xiàn)禾一個攤?cè)送ㄌ熘嗄c個人榜的效紅果,路類似啄裁判暮一聲王口令鍬,運嗓動員承同時叉開始談奔跑死。用沒這個鬼功能陰做百口米賽帥跑的靈游戲蒙程序平不錯軌哦!Ex競ch休an哈ge翅r用于獵實現(xiàn)需兩個常人之璃間的悠數(shù)據(jù)僅交換顯,每偽個人叼在完滴成一因定的厲事務(wù)拒后想平與對壯方交掌換數(shù)濤據(jù),纖第一暮個先略拿出勺數(shù)據(jù)擺的人賠將一璃直等耍待第襯二個龍人拿毒著數(shù)級據(jù)到稠來時茂,才這能彼贊此交濤換數(shù)滅據(jù)。北京李傳智就播客眨教育可阻曲塞的醒隊列什么逮是可雖阻塞錢隊列樣,阻刺塞隊始列的抄作用映與實促際應(yīng)怨用,竊阻塞猾隊列撈的實同現(xiàn)原詞理。阻塞辮隊列晨與S嶼em料ap歪ho蠅re憲有些緞相似活,但慨也不管同,遺阻塞嫌隊列少是一勤方存些放數(shù)包據(jù),寄另一適方釋諸放數(shù)澡據(jù),斷Se扛ma陶ph愛or置e通苦常則球是由洽同一閉方設(shè)膨置和足釋放字信號溝量。Ar想ra蜓yB柔lo乒ck吸in狗gQ騙ue規(guī)ue只有若pu令t方窩法和聯(lián)ta旦ke方法耍才具手有阻巷塞功跑能用3個恰空間柜的隊街列來恭演示若阻塞畝隊列暢的功幟能和爛效果伶。用兩凱個具例有1臟個空多間的棟隊列侮來實圣現(xiàn)同凝步通雄知的您功能站。北京瀉傳智寧播客張教育同步殊集合

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論