51CTO學(xué)院-JavaSE之多線程實(shí)戰(zhàn)視頻課程_第1頁
51CTO學(xué)院-JavaSE之多線程實(shí)戰(zhàn)視頻課程_第2頁
51CTO學(xué)院-JavaSE之多線程實(shí)戰(zhàn)視頻課程_第3頁
51CTO學(xué)院-JavaSE之多線程實(shí)戰(zhàn)視頻課程_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

51CTO學(xué)院 網(wǎng)址:edu.51CTO.com51cto學(xué)院-JavaSE之多線程實(shí)戰(zhàn)視頻課程課程目標(biāo)多線程的概念在Java中實(shí)現(xiàn)多線程Thread類Runnable接口線程的生命周期和線程狀態(tài)后臺(tái)線程線程同步與死鎖適用人群Java初學(xué)者,Java初級(jí)開發(fā)人員課程簡(jiǎn)介多線程的概念在Java中實(shí)現(xiàn)多線程Thread類Runnable接口線程的生命周期和線程狀態(tài)后臺(tái)線程線程同步課程1多線程概念和主線程免費(fèi)觀看28分鐘運(yùn)行在操作系統(tǒng)之上的每個(gè)應(yīng)用程序,都會(huì)占用一個(gè)獨(dú)立的進(jìn)程(process),而進(jìn)程內(nèi)又允許運(yùn)行多個(gè)線程(thread),這意味著一個(gè)程序可以同時(shí)執(zhí)行多個(gè)任務(wù)的功能; 在基于線程的多任務(wù)而處理環(huán)境中,線程是執(zhí)行特定任務(wù)的可執(zhí)行代碼的最小單位; 多線程幫助你寫出CPU最大利用率的高效程序,因?yàn)榭臻e時(shí)間保持最低,這對(duì)Java運(yùn)行的交互式的網(wǎng)絡(luò)互連環(huán)境是至關(guān)重要的,例如:網(wǎng)絡(luò)的數(shù)據(jù)傳輸速率遠(yuǎn)低于計(jì)算機(jī)的處理能力,在傳統(tǒng)的單線程環(huán)境中,你的計(jì)算機(jī)必須花費(fèi)大量的空閑時(shí)間來等待,多線程能夠使你充分利用這些空閑時(shí)間。2通過Thread實(shí)現(xiàn)線程免費(fèi)觀看14分鐘java.lang.Thread類用于創(chuàng)建和操作線程,其中包括幾個(gè)很重要的靜態(tài)方法,用于控制當(dāng)前線程3通過Runable接口實(shí)現(xiàn)線程11分鐘java.lang.Runnable接口中僅僅只有一個(gè)抽象方法: public void run(); 也可以通過實(shí)現(xiàn)Runnable接口的方式來實(shí)現(xiàn)線程,只需要實(shí)現(xiàn)其中的run方法即可; Runnable接口的存在主要是為了解決Java中不允許多繼承的問題; 使用Runnable接口可以使語法的自由度更高。4賣票示例21分鐘講解賣票示例5同步synchronized (一)33分鐘同步代碼塊 synchronized (對(duì)象) 需要被同步的代碼 對(duì)象如同鎖 。持有鎖的線程可以在同步中執(zhí)行 沒有持有鎖的線程即使獲取CPU的執(zhí)行權(quán),也進(jìn)不去, 因?yàn)闆]有獲取鎖 同步的前提: 必須要有2個(gè)或者2個(gè)以上的線程 必須是多個(gè)線程使用同一個(gè)鎖 好處:解決了多線程的安全問題 壞處:多線程需要判斷鎖,較為消耗資源6同步synchronized (二)20分鐘同步代碼塊 synchronized (對(duì)象) 需要被同步的代碼 對(duì)象如同鎖 。持有鎖的線程可以在同步中執(zhí)行 沒有持有鎖的線程即使獲取CPU的執(zhí)行權(quán),也進(jìn)不去, 因?yàn)闆]有獲取鎖 同步的前提: 必須要有2個(gè)或者2個(gè)以上的線程 必須是多個(gè)線程使用同一個(gè)鎖 好處:解決了多線程的安全問題 壞處:多線程需要判斷鎖,較為消耗資源7優(yōu)先級(jí)9分鐘事實(shí)上,計(jì)算機(jī)只有一個(gè)CPU,各個(gè)線程輪流獲得CPU的使用權(quán),才能執(zhí)行任務(wù); 優(yōu)先級(jí)較高的線程有更多獲得CPU的機(jī)會(huì),反之亦然; 優(yōu)先級(jí)用整數(shù)表示,取值范圍是110,一般情況下,線程的默認(rèn)優(yōu)先級(jí)都是5,但是也可以通過setPriority和getPriority方法來設(shè)置或返回優(yōu)先級(jí); Thread類有如下3個(gè)靜態(tài)常量來表示優(yōu)先級(jí): MAX_PRIORITY:取值為10,表示最高優(yōu)先級(jí) MIN_PRIORITY:取值為1,表示最底優(yōu)先級(jí) NORM_PRIORITY:取值為5,表示默認(rèn)的優(yōu)先級(jí)8生命周期和停止線程24分鐘新建狀態(tài)(New):使用new關(guān)鍵字創(chuàng)建線程對(duì)象,僅僅被分配了內(nèi)存; 就緒狀態(tài)(Ready):線程對(duì)象被創(chuàng)建后,等待它的start方法被調(diào)用,以獲得CPU的使用權(quán); 運(yùn)行狀態(tài)(Running):執(zhí)行run方法,此時(shí)的線程的對(duì)象正占用CPU; 睡眠狀態(tài)(Sleeping):調(diào)用sleep方法,線程被暫停,睡眠時(shí)間結(jié)束后,線程回到就緒狀態(tài),睡眠狀態(tài)的線程不占用CPU; 死亡狀態(tài)(Dead):run方法執(zhí)行完畢后,線程進(jìn)入死亡狀態(tài); 阻塞狀態(tài)(Blocked):線程由于某些事件(如等待鍵盤輸入)放棄CPU,暫停運(yùn)行,直到線程重新進(jìn)入就緒狀態(tài),才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài);9yield和join18分鐘sleep和yield都是Thread類的靜態(tài)方法,都會(huì)使當(dāng)前處于運(yùn)行狀態(tài)的線程放棄CPU,但兩者的區(qū)別在于: sleep給其它線程運(yùn)行的機(jī)會(huì),但不考慮其它線程的優(yōu)先級(jí);但yield只會(huì)讓位給相同或更高優(yōu)先級(jí)的線程; 當(dāng)線程執(zhí)行了sleep方法后,將轉(zhuǎn)到阻塞狀態(tài),而執(zhí)行了yield方法之后,則轉(zhuǎn)到就緒狀態(tài); sleep方法有可能拋出異常,而yield則沒有; 在一般情況下,我們更建議使用sleep方法。 join方法用于等待其它線程結(jié)束,當(dāng)前運(yùn)行的線程可以調(diào)用另一線程的join方法,當(dāng)前運(yùn)行線程將轉(zhuǎn)到阻塞狀態(tài),直至另一線程執(zhí)行結(jié)束,它才會(huì)恢復(fù)運(yùn)行。10生產(chǎn)者和消費(fèi)者35分鐘在實(shí)際的軟件開發(fā)過程中,經(jīng)常會(huì)碰到如下場(chǎng)景:某個(gè)模塊負(fù)責(zé)產(chǎn)生數(shù)據(jù),這些數(shù)據(jù)由另一個(gè)模塊來負(fù)責(zé)處理(此處的模塊是廣義的,可以是類、函數(shù)、線程、進(jìn)程等)

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論