已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第12講線程技術(shù)JavaMulti Threads 計(jì)算機(jī)與通信學(xué)院 本章主要內(nèi)容 一 線程及多線程的概念 程序 program 是對(duì)數(shù)據(jù)描述與操作的代碼的集合 是應(yīng)用程序執(zhí)行的腳本 是靜態(tài)的 一 線程及多線程的概念 進(jìn)程 process 是程序的一次完整的執(zhí)行過(guò)程 是操作系統(tǒng)運(yùn)行程序的基本單位 系統(tǒng)從程序入口開(kāi)始按語(yǔ)句的順序 其中包括順序 分支和循環(huán) 完成相應(yīng)指令直至結(jié)尾 從出口退出 同時(shí)整個(gè)程序結(jié)束 是動(dòng)態(tài)的 一個(gè)進(jìn)程既包括其所要執(zhí)行的指令 也包括了執(zhí)行指令所需的任何系統(tǒng)資源 如CPU 內(nèi)存空間 I O端口等 不同進(jìn)程所占用的系統(tǒng)資源相對(duì)獨(dú)立 一 線程及多線程的概念 多任務(wù)是指在一個(gè)系統(tǒng)中可以同時(shí)運(yùn)行多個(gè)程序 即有多個(gè)獨(dú)立運(yùn)行的任務(wù) 多個(gè)進(jìn)程 每一個(gè)任務(wù)對(duì)應(yīng)一個(gè)進(jìn)程 例如 邊聽(tīng)音樂(lè)邊編寫(xiě)Java程序 一 線程及多線程的概念 線程是比進(jìn)程更小的運(yùn)行單位 是程序中單個(gè)順序的流控制 每個(gè)線程也有它自身的產(chǎn)生 存在和消亡的過(guò)程 是一個(gè)動(dòng)態(tài)的概念 在執(zhí)行的任何時(shí)刻 只有一個(gè)執(zhí)行點(diǎn) 一 線程及多線程的概念 多線程 Multi Threads 多線程是相對(duì)于單線程而言的 指的是在一個(gè)程序中可以定義多個(gè)線程并同時(shí)運(yùn)行它們 每個(gè)線程可以執(zhí)行不同的任務(wù) 與多進(jìn)程不同的是 同類多線程共享一塊內(nèi)存空間和一組系統(tǒng)資源 所以 系統(tǒng)創(chuàng)建多線程花費(fèi)單價(jià)較小 因此 也稱線程為輕負(fù)荷進(jìn)程 例如 在線看電影 播放程序在播放的同時(shí)也在下載 一 線程及多線程的概念 線程與進(jìn)程的區(qū)別線程并不是一個(gè)完整的程序 它自己本身并不能獨(dú)立運(yùn)行 只能包含在程序中 只能在進(jìn)程內(nèi)部執(zhí)行 process process 一 線程及多線程的概念 線程與進(jìn)程的區(qū)別多個(gè)進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨(dú)立的 線程本身的數(shù)據(jù)通常只有寄存器數(shù)據(jù) 以及一個(gè)程序執(zhí)行時(shí)使用的堆棧 所以線程的切換比進(jìn)程切換的負(fù)擔(dān)要小 屬于同一進(jìn)程的所有線程共享該進(jìn)程的內(nèi)存空間和一組系統(tǒng)資源 所以線程之間切換的速度比進(jìn)程切換要快得多 二 Java中的線程技術(shù) Java的線程是通過(guò)軟件包java lang中定義的類Thread來(lái)實(shí)現(xiàn)的 當(dāng)生成一個(gè)Thread類的對(duì)象之后 就產(chǎn)生了一個(gè)線程 通過(guò)該對(duì)象 可以啟動(dòng)線程 終止線程 或者暫時(shí)掛起線程等 二 Java中的線程技術(shù) Thread在Java包中的層次關(guān)系 所有已實(shí)現(xiàn)的接口 RunnableThread類的原型 publicclassThreadextendsObjectimplementsRunnable 二 Java中的線程技術(shù) Runnable接口 java lang RunnableRunnable的原型 publicinterfaceRunnable voidrun 二 Java中線程的創(chuàng)建 二 Java中線程的創(chuàng)建 二 Java中線程的創(chuàng)建 二 Java中線程的創(chuàng)建 二 Java中線程的創(chuàng)建 通過(guò)擴(kuò)展Thread類創(chuàng)建線程 方法一1 創(chuàng)建Thread類的子類 2 重寫(xiě)Thread類中的run 方法 3 創(chuàng)建子類的對(duì)象 4 調(diào)用線程對(duì)象的start 方法 例子 ThreadTest java 二 Java中線程的創(chuàng)建 通過(guò)擴(kuò)展Thread類創(chuàng)建線程 方法一1 創(chuàng)建Thread類的子類 2 重寫(xiě)Thread類中的run 方法 3 創(chuàng)建子類的對(duì)象 4 調(diào)用線程對(duì)象的start 方法 例子 ThreadTest java 二 Java中線程的創(chuàng)建 例子 ThreadTest java 二 Java中線程的創(chuàng)建 實(shí)現(xiàn)Runnable接口創(chuàng)建線程 方法二1 創(chuàng)建實(shí)現(xiàn)接口Runnable的類 2 實(shí)現(xiàn)接口Runnable中的run 方法 3 創(chuàng)建實(shí)現(xiàn)了Runnable接口的類對(duì)象 4 將3中創(chuàng)建的對(duì)象作為參數(shù) 創(chuàng)建Thread類對(duì)象 5 調(diào)用線程對(duì)象的start 方法 例子 AppletThreadTest java 二 Java中線程的創(chuàng)建 二 Java中線程的創(chuàng)建 例子 RunnableThreadTest java 二 線程的狀態(tài)和生命周期 線程的狀態(tài) 二 線程的狀態(tài)和生命周期 線程的生命周期1 新建2 就緒3 運(yùn)行4 阻塞5 死亡 二 線程的狀態(tài)和生命周期 1 新建當(dāng)一個(gè)Thread類或其子類的對(duì)象被聲明并創(chuàng)建時(shí) 新生的線程對(duì)象處于新建狀態(tài) 此時(shí)它已經(jīng)有了相應(yīng)的內(nèi)存空間和其他資源 并已被初始化 2 就緒處于新建狀態(tài)的線程被啟動(dòng)后 將進(jìn)入線程隊(duì)列排隊(duì)等待CPU時(shí)間片 此時(shí)它已經(jīng)具備了運(yùn)行的條件 一旦輪到它來(lái)享用CPU資源時(shí) 就可以脫離創(chuàng)建它的主線程獨(dú)立開(kāi)始自己的生命周期了 另外 原來(lái)處于阻塞狀態(tài)的線程被解除阻塞后也將進(jìn)入就緒狀態(tài) 二 線程的狀態(tài)和生命周期 3 運(yùn)行當(dāng)就緒狀態(tài)的線程被調(diào)度并獲得處理器資源時(shí) 便進(jìn)入運(yùn)行狀態(tài) run 方法每一個(gè)Thread類及其子類的對(duì)象都有一個(gè)重要的run 方法 當(dāng)線程對(duì)象被調(diào)度執(zhí)行時(shí) 它將自動(dòng)調(diào)用本對(duì)象的run 方法 從第一句開(kāi)始順序執(zhí)行 run 方法定義了這一類線程的操作和功能 二 線程的狀態(tài)和生命周期 4 阻塞一個(gè)正在執(zhí)行的線程如果在某些特殊情況下 如被人為掛起或需要執(zhí)行費(fèi)時(shí)的輸入輸出操作時(shí) 將讓出CPU并暫時(shí)中止自己的執(zhí)行 進(jìn)入阻塞狀態(tài) 阻塞時(shí)它不能進(jìn)入排列隊(duì)列 只有當(dāng)引起阻塞的原因被消除時(shí) 線程才可以轉(zhuǎn)入就緒狀態(tài) 重新進(jìn)到線程隊(duì)列中排隊(duì)等待CPU資源 以便從原來(lái)終止處開(kāi)始繼續(xù)執(zhí)行 二 線程的狀態(tài)和生命周期 5 死亡處于死亡狀態(tài)的線程不具有繼續(xù)運(yùn)行的能力 線程死亡的原因有兩個(gè) 一個(gè)是正常運(yùn)行的線程完成了它的全部工作 即執(zhí)行完了run 方法的最后一個(gè)語(yǔ)句并退出 另一個(gè)是線程被提前強(qiáng)制性地終止 如通過(guò)執(zhí)行stop 方法或destroy 終止線程 二 線程調(diào)度與優(yōu)先級(jí) 二 線程調(diào)度與優(yōu)先級(jí) 調(diào)度就是分配CPU資源 確定線程的執(zhí)行順序 Java采用搶占式調(diào)度方式 即高優(yōu)先級(jí)線程具有剝奪低優(yōu)先級(jí)線程執(zhí)行的權(quán)力 如果一個(gè)低優(yōu)先線程正在執(zhí)行 這時(shí)出現(xiàn)一個(gè)高優(yōu)先級(jí)線程 那么低優(yōu)先級(jí)線程就只能停止執(zhí)行 放棄CPU 推回到等待隊(duì)列中 等待下一輪執(zhí)行 而讓高優(yōu)先級(jí)線程立即執(zhí)行 如果線程具有相同的優(yōu)先級(jí) 則按 先來(lái)先服務(wù) 的原則調(diào)度 二 線程調(diào)度與優(yōu)先級(jí) 問(wèn)題 如果高優(yōu)先級(jí)搶占了低優(yōu)先級(jí)的線程后 一直占據(jù)CPU 低優(yōu)先級(jí)的線程如何獲得控制權(quán) 有兩個(gè)方法可以改變這種現(xiàn)象 一是調(diào)用sleep 方法 暫時(shí)進(jìn)入睡眠狀態(tài) 從而讓出CPU 使有相同優(yōu)先級(jí)線程和低優(yōu)先級(jí)線程有執(zhí)行的機(jī)會(huì) 二是調(diào)用yield 而放棄CPU 這時(shí)和它有相同優(yōu)先級(jí)的線程就有執(zhí)行的機(jī)會(huì) 三 多線程并發(fā)程序 二 線程組 ThreadGroup 二 守護(hù)線程 Deamon 三 多線程并發(fā)程序 線程同步 在多線程的程序中 當(dāng)多個(gè)線程并發(fā)執(zhí)行時(shí) 由于線程的相對(duì)執(zhí)行順序是不確定的 當(dāng)多個(gè)并發(fā)線程需要共享程序的代碼區(qū)域和數(shù)據(jù)區(qū)域時(shí) 由于各線程的執(zhí)行順序是不確定的 因此執(zhí)行的結(jié)果就帶有不確定性 這就要求線程同步例子 MultiThread java 三 多線程并發(fā)程序 線程同步 臨界區(qū)和線程同步在多線程程序設(shè)計(jì)中 我們將程序中那些不能被多個(gè)線程并發(fā)執(zhí)行的代碼段稱為臨界區(qū) 當(dāng)某個(gè)線程已處于臨界區(qū)時(shí) 其他的線程就不允許再進(jìn)入臨界區(qū) 實(shí)現(xiàn)方法 則是在共享代碼之前加入synchronized段 把共享代碼包含在synchronized段中 格式如下 synchronized objectname statement其中 objectname用于指出該臨界區(qū)的監(jiān)控對(duì)象 是可選項(xiàng) statem
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)派遣雙方協(xié)議書(shū)七篇
- 個(gè)人建筑承包協(xié)議
- 非典型麻疹綜合征病因介紹
- 機(jī)械基礎(chǔ) 課件 模塊八任務(wù)三 聯(lián)軸器與離合器
- (2024)黃金選礦劑生產(chǎn)建設(shè)項(xiàng)目可行性研究報(bào)告(一)
- 全景式數(shù)字游民洞察報(bào)告
- 獸醫(yī)寄生蟲(chóng)病學(xué)練習(xí)題含參考答案
- 佐樂(lè)米貼鼻子課件
- 養(yǎng)老院老人洗浴衛(wèi)生管理制度
- 養(yǎng)老院老人緊急救援人員培訓(xùn)制度
- 2023-2024學(xué)年廣東省廣州市白云區(qū)九年級(jí)(上)期末語(yǔ)文試卷
- 2024-2025學(xué)年四年級(jí)科學(xué)上冊(cè)第三單元《運(yùn)動(dòng)和力》測(cè)試卷(教科版)
- 學(xué)術(shù)規(guī)范與論文寫(xiě)作智慧樹(shù)知到答案2024年浙江工業(yè)大學(xué)
- 2024年典型事故案例警示教育手冊(cè)15例
- 日標(biāo)法蘭尺寸表
- 繪本PPT:可怕的大妖怪
- 【打印版】2021年上海市浦東新區(qū)中考一模數(shù)學(xué)試卷及解析
- EN1779-歐洲無(wú)損檢測(cè)標(biāo)準(zhǔn)
- 【數(shù)據(jù)結(jié)構(gòu)】A類停車場(chǎng)管理系統(tǒng)
- 生態(tài)保護(hù)紅線劃定.ppt
- 機(jī)械原理榫槽成型半自動(dòng)切削機(jī)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論