




已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第12講線程技術(shù)JavaMulti Threads 計算機(jī)與通信學(xué)院 本章主要內(nèi)容 一 線程及多線程的概念 程序 program 是對數(shù)據(jù)描述與操作的代碼的集合 是應(yīng)用程序執(zhí)行的腳本 是靜態(tài)的 一 線程及多線程的概念 進(jìn)程 process 是程序的一次完整的執(zhí)行過程 是操作系統(tǒng)運(yùn)行程序的基本單位 系統(tǒng)從程序入口開始按語句的順序 其中包括順序 分支和循環(huán) 完成相應(yīng)指令直至結(jié)尾 從出口退出 同時整個程序結(jié)束 是動態(tài)的 一個進(jìn)程既包括其所要執(zhí)行的指令 也包括了執(zhí)行指令所需的任何系統(tǒng)資源 如CPU 內(nèi)存空間 I O端口等 不同進(jìn)程所占用的系統(tǒng)資源相對獨立 一 線程及多線程的概念 多任務(wù)是指在一個系統(tǒng)中可以同時運(yùn)行多個程序 即有多個獨立運(yùn)行的任務(wù) 多個進(jìn)程 每一個任務(wù)對應(yīng)一個進(jìn)程 例如 邊聽音樂邊編寫Java程序 一 線程及多線程的概念 線程是比進(jìn)程更小的運(yùn)行單位 是程序中單個順序的流控制 每個線程也有它自身的產(chǎn)生 存在和消亡的過程 是一個動態(tài)的概念 在執(zhí)行的任何時刻 只有一個執(zhí)行點 一 線程及多線程的概念 多線程 Multi Threads 多線程是相對于單線程而言的 指的是在一個程序中可以定義多個線程并同時運(yùn)行它們 每個線程可以執(zhí)行不同的任務(wù) 與多進(jìn)程不同的是 同類多線程共享一塊內(nèi)存空間和一組系統(tǒng)資源 所以 系統(tǒng)創(chuàng)建多線程花費(fèi)單價較小 因此 也稱線程為輕負(fù)荷進(jìn)程 例如 在線看電影 播放程序在播放的同時也在下載 一 線程及多線程的概念 線程與進(jìn)程的區(qū)別線程并不是一個完整的程序 它自己本身并不能獨立運(yùn)行 只能包含在程序中 只能在進(jìn)程內(nèi)部執(zhí)行 process process 一 線程及多線程的概念 線程與進(jìn)程的區(qū)別多個進(jìn)程的內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨立的 線程本身的數(shù)據(jù)通常只有寄存器數(shù)據(jù) 以及一個程序執(zhí)行時使用的堆棧 所以線程的切換比進(jìn)程切換的負(fù)擔(dān)要小 屬于同一進(jìn)程的所有線程共享該進(jìn)程的內(nèi)存空間和一組系統(tǒng)資源 所以線程之間切換的速度比進(jìn)程切換要快得多 二 Java中的線程技術(shù) Java的線程是通過軟件包java lang中定義的類Thread來實現(xiàn)的 當(dāng)生成一個Thread類的對象之后 就產(chǎn)生了一個線程 通過該對象 可以啟動線程 終止線程 或者暫時掛起線程等 二 Java中的線程技術(shù) Thread在Java包中的層次關(guān)系 所有已實現(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)建 通過擴(kuò)展Thread類創(chuàng)建線程 方法一1 創(chuàng)建Thread類的子類 2 重寫Thread類中的run 方法 3 創(chuàng)建子類的對象 4 調(diào)用線程對象的start 方法 例子 ThreadTest java 二 Java中線程的創(chuàng)建 通過擴(kuò)展Thread類創(chuàng)建線程 方法一1 創(chuàng)建Thread類的子類 2 重寫Thread類中的run 方法 3 創(chuàng)建子類的對象 4 調(diào)用線程對象的start 方法 例子 ThreadTest java 二 Java中線程的創(chuàng)建 例子 ThreadTest java 二 Java中線程的創(chuàng)建 實現(xiàn)Runnable接口創(chuàng)建線程 方法二1 創(chuàng)建實現(xiàn)接口Runnable的類 2 實現(xiàn)接口Runnable中的run 方法 3 創(chuàng)建實現(xiàn)了Runnable接口的類對象 4 將3中創(chuàng)建的對象作為參數(shù) 創(chuàng)建Thread類對象 5 調(diào)用線程對象的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)一個Thread類或其子類的對象被聲明并創(chuàng)建時 新生的線程對象處于新建狀態(tài) 此時它已經(jīng)有了相應(yīng)的內(nèi)存空間和其他資源 并已被初始化 2 就緒處于新建狀態(tài)的線程被啟動后 將進(jìn)入線程隊列排隊等待CPU時間片 此時它已經(jīng)具備了運(yùn)行的條件 一旦輪到它來享用CPU資源時 就可以脫離創(chuàng)建它的主線程獨立開始自己的生命周期了 另外 原來處于阻塞狀態(tài)的線程被解除阻塞后也將進(jìn)入就緒狀態(tài) 二 線程的狀態(tài)和生命周期 3 運(yùn)行當(dāng)就緒狀態(tài)的線程被調(diào)度并獲得處理器資源時 便進(jìn)入運(yùn)行狀態(tài) run 方法每一個Thread類及其子類的對象都有一個重要的run 方法 當(dāng)線程對象被調(diào)度執(zhí)行時 它將自動調(diào)用本對象的run 方法 從第一句開始順序執(zhí)行 run 方法定義了這一類線程的操作和功能 二 線程的狀態(tài)和生命周期 4 阻塞一個正在執(zhí)行的線程如果在某些特殊情況下 如被人為掛起或需要執(zhí)行費(fèi)時的輸入輸出操作時 將讓出CPU并暫時中止自己的執(zhí)行 進(jìn)入阻塞狀態(tài) 阻塞時它不能進(jìn)入排列隊列 只有當(dāng)引起阻塞的原因被消除時 線程才可以轉(zhuǎn)入就緒狀態(tài) 重新進(jìn)到線程隊列中排隊等待CPU資源 以便從原來終止處開始繼續(xù)執(zhí)行 二 線程的狀態(tài)和生命周期 5 死亡處于死亡狀態(tài)的線程不具有繼續(xù)運(yùn)行的能力 線程死亡的原因有兩個 一個是正常運(yùn)行的線程完成了它的全部工作 即執(zhí)行完了run 方法的最后一個語句并退出 另一個是線程被提前強(qiáng)制性地終止 如通過執(zhí)行stop 方法或destroy 終止線程 二 線程調(diào)度與優(yōu)先級 二 線程調(diào)度與優(yōu)先級 調(diào)度就是分配CPU資源 確定線程的執(zhí)行順序 Java采用搶占式調(diào)度方式 即高優(yōu)先級線程具有剝奪低優(yōu)先級線程執(zhí)行的權(quán)力 如果一個低優(yōu)先線程正在執(zhí)行 這時出現(xiàn)一個高優(yōu)先級線程 那么低優(yōu)先級線程就只能停止執(zhí)行 放棄CPU 推回到等待隊列中 等待下一輪執(zhí)行 而讓高優(yōu)先級線程立即執(zhí)行 如果線程具有相同的優(yōu)先級 則按 先來先服務(wù) 的原則調(diào)度 二 線程調(diào)度與優(yōu)先級 問題 如果高優(yōu)先級搶占了低優(yōu)先級的線程后 一直占據(jù)CPU 低優(yōu)先級的線程如何獲得控制權(quán) 有兩個方法可以改變這種現(xiàn)象 一是調(diào)用sleep 方法 暫時進(jìn)入睡眠狀態(tài) 從而讓出CPU 使有相同優(yōu)先級線程和低優(yōu)先級線程有執(zhí)行的機(jī)會 二是調(diào)用yield 而放棄CPU 這時和它有相同優(yōu)先級的線程就有執(zhí)行的機(jī)會 三 多線程并發(fā)程序 二 線程組 ThreadGroup 二 守護(hù)線程 Deamon 三 多線程并發(fā)程序 線程同步 在多線程的程序中 當(dāng)多個線程并發(fā)執(zhí)行時 由于線程的相對執(zhí)行順序是不確定的 當(dāng)多個并發(fā)線程需要共享程序的代碼區(qū)域和數(shù)據(jù)區(qū)域時 由于各線程的執(zhí)行順序是不確定的 因此執(zhí)行的結(jié)果就帶有不確定性 這就要求線程同步例子 MultiThread java 三 多線程并發(fā)程序 線程同步 臨界區(qū)和線程同步在多線程程序設(shè)計中 我們將程序中那些不能被多個線程并發(fā)執(zhí)行的代碼段稱為臨界區(qū) 當(dāng)某個線程已處于臨界區(qū)時 其他的線程就不允許再進(jìn)入臨界區(qū) 實現(xiàn)方法 則是在共享代碼之前加入synchronized段 把共享代碼包含在synchronized段中 格式如下 synchronized objectname statement其中 objectname用于指出該臨界區(qū)的監(jiān)控對象 是可選項 statem
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025授權(quán)許可合同格式
- 2025標(biāo)準(zhǔn)企業(yè)流動資產(chǎn)借款合同范本
- 2024年陽泉師范高等??茖W(xué)校輔導(dǎo)員考試真題
- 2024年內(nèi)江市資中縣人民醫(yī)院招聘員額人員真題
- 2024年安徽省港航集團(tuán)所屬企業(yè)招聘真題
- 2025年二手電商平臺信用體系建設(shè)與行業(yè)自律規(guī)范
- 越劇表演培訓(xùn)行業(yè)跨境出海項目商業(yè)計劃書
- 大學(xué)定積分題目及答案
- 2025年低碳城市建設(shè)實踐:城市綠色轉(zhuǎn)型案例研究
- 勞動教育期末考試試題及答案小學(xué)
- 2024年湖北省武漢市中考?xì)v史真題
- 山東省棗莊市薛城區(qū)2023-2024學(xué)年八年級下學(xué)期7月期末歷史試題(無答案)
- 浙江省杭州市2022-2023學(xué)年五年級下學(xué)期數(shù)學(xué)期末試卷(含答案)3
- 新高一數(shù)學(xué)銜接課程
- 5.4 核酸疫苗(mrna疫苗)
- (2024年)銀行不良清收技巧培訓(xùn)課件(學(xué)員版)
- 廣東省東莞市2022-2023學(xué)年高二上學(xué)期期末考試化學(xué)試題(解析版)
- 生地會考動員決戰(zhàn)生地之巔生地百日沖刺動員主題班會課件
- 養(yǎng)老護(hù)理員(三級)重點復(fù)習(xí)考試題庫(500題)
- 常州市溧陽市2022-2023學(xué)年七年級第二學(xué)期數(shù)學(xué)期末試卷(含答案解析)
- 高效節(jié)能超聲波加濕技術(shù)研究
評論
0/150
提交評論