版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第十二章線程
Java程序設計本章主要內(nèi)容
概述線程的創(chuàng)建方法線程的基本操作線程組小結(jié)2024/12/24李飛——計算中心2/30概述程序:指由計算機語言的語句組成的用于解決一個實際問題的語句集合。程序是一段靜態(tài)的代碼,它可以看成驅(qū)動計算機硬件完成某一功能的執(zhí)行腳本。進程:程序的一次運行稱為一個進程(Process),它是計算機系統(tǒng)進行軟硬件資源分配和調(diào)度的一個獨立單位。進程可以并發(fā),在多個進程并發(fā)運行時,會出現(xiàn)運行、阻塞和就緒三種狀態(tài),并依據(jù)一定的條件而相互轉(zhuǎn)換。線程:也被稱為輕量級進程(LightweightProcess,LWP)。線程是程序執(zhí)行流的最小單元;是程序中的一個單一的順序控制流程;是進程內(nèi)一個相對獨立的、可調(diào)度的執(zhí)行單元;是系統(tǒng)獨立調(diào)度和分派CPU的基本單位;是運行中的程序的最小調(diào)度單位。2024/12/24李飛——東北大學秦皇島分校計算中心3/35進程、線程之間的關(guān)系2024/12/24李飛——東北大學秦皇島分校計算中心4/35線程的狀態(tài)
新建狀態(tài):剛剛創(chuàng)建的線程就處于新建狀態(tài)。2.就緒狀態(tài)。就緒狀態(tài):也稱可運行狀態(tài),處于新建狀態(tài)的線程被啟動后,是指線程具備運行的所有條件,邏輯上可以運行,在等待處理機的運行,一旦輪到它使用處理機資源,它就可以開始運行了。運行狀態(tài):運行狀態(tài)是指線程占有處理機正在運行時的狀態(tài)。阻塞狀態(tài):阻塞狀態(tài)是指正在運行狀態(tài)的線程在某些特殊情況下,需要讓出處理機資源,并暫時終止自己的運行。這時線程處于不可運行的狀態(tài),這就好比旅客已經(jīng)登上火車,在火車運行過程中忽然臨時停車,以避讓其他火車時的狀態(tài)。消亡狀態(tài):處于消亡狀態(tài)的線程不具備繼續(xù)運行的能力。2024/12/24李飛——東北大學秦皇島分校計算中心5/35線程狀態(tài)之間的轉(zhuǎn)換線程在以下幾種情況中會進入阻塞狀態(tài)。1)調(diào)用sleep()方法或yield()方法。2)為等候一個條件,線程調(diào)用wait()方法。3)該線程與另一個線程join在一起。導致線程進入消亡狀態(tài)的原因有兩個。1)正常運行的線程完成了它的全部工作。2)當進程因故停止運行時,該進程中的所有線程將被強行終止。2024/12/24李飛——東北大學秦皇島分校計算中心6/352線程的創(chuàng)建方法
1通過繼承Thread類創(chuàng)建線程從Thread類派生一個子類,在類中一定要重寫run()方法。用這個子類創(chuàng)建一個對象。調(diào)用這個對象的start()方法,用于啟動線程。2用Runnable接口創(chuàng)建線程在定義自己的類時說明該類繼承Runnable接口。在類定義中實現(xiàn)run()方法。在調(diào)用線程的類中建立自定義的類的實例對象R。在調(diào)用線程的類中用Thread類的構(gòu)造方法Thread(R)通過對象R來創(chuàng)建線程對象。調(diào)用線程對象的start()方法,啟動線程。2024/12/24李飛——東北大學秦皇島分校計算中心7/35通過Thread類創(chuàng)建線程的代碼框架classMyThreadextendsThread{
成員變量;
成員方法; publicvoidrun(){ //線程需要完成的功能對應的代碼 }}publicclassTestThread{ publicstaticvoidmain(String[]args){ MyThreadthread1=newMyThread(); //使用start方法啟動線程 thread1.start(); }}
2024/12/24李飛——東北大學秦皇島分校計算中心8/35通過Runnable接口創(chuàng)建線程的代碼框架classMyThreadimplementsRunnable{
成員變量;
成員方法; publicvoidrun(){ //線程需要完成的功能對應的代碼 }}publicclassTestThread{ publicstaticvoidmain(String[]args){ MyThreadt=newMyThread();//創(chuàng)建實現(xiàn)Runnable接口的類的對象//通過實現(xiàn)Runnable接口的類的對象創(chuàng)建線程類對象Threadthread1=newThread(t1); //使用start方法啟動線程 thread1.start(); }}
2024/12/24李飛——東北大學秦皇島分校計算中心9/353線程的基本操作線程類中的常用方法2024/12/24李飛——東北大學秦皇島分校計算中心10/35方法名功能start()啟動線程對象。run()定義線程體,即定義線程啟動后所執(zhí)行的操作。wait()使線程處于等待狀態(tài)。isAlive()測試線程是否在活動。setPriority(intpriority)設置線程的優(yōu)先級。yield()強行終止線程的執(zhí)行。sleep(intmillsecond)使線程休眠一段時間,時間長短由參數(shù)millsecond決定,單位是毫秒。join(longmillis)等待該線程終止。等待該線程終止的時間最長為millis毫秒。1線程的啟動創(chuàng)建線程對象Tt.start();//線程啟動2024/12/24李飛——東北大學秦皇島分校計算中心11/35線程的調(diào)度Java的線程調(diào)度策略:
多線程系統(tǒng)會自動為每個線程分配一個優(yōu)先級,默認時,繼承父類的優(yōu)先級。優(yōu)先級高的線程先執(zhí)行,優(yōu)先級低的線程后執(zhí)行。任務緊急的線程,其優(yōu)先級較高。優(yōu)先級相同的線程,按先進先出的原則排隊運行。線程的優(yōu)先級分為10級,在線程類Thread中,Java設置了3個和優(yōu)先級相關(guān)的靜態(tài)量。1)MAX_PRIORITY:表示線程可以具有的最高優(yōu)先級,值為10。2)MIN_PRIORITY:表示線程可以具有的最低優(yōu)先級,值為1。3)NORM_PRIORITY:表示分配給線程的默認優(yōu)先級,值為5。2024/12/24李飛——東北大學秦皇島分校計算中心12/35線程的同步保留字synchronized:Synchronized是聲明對象需要同步的保留字,其作用是使被聲明的方法處于同步使用狀態(tài)。Synchronized保留字寫在方法前,用于向程序說明該方法處于同步狀態(tài)。為說明Synchronized保留字的使用,我們先介紹一下臨界區(qū)和對象鎖的概念。臨界區(qū):在Java中我們稱多線程并發(fā)運行時,線程訪問相同對象的代碼段為臨界區(qū)。臨界區(qū)可以是一個代碼塊或一個方法。對象鎖:Java運行系統(tǒng)在執(zhí)行具有保留字synchronized聲明的方法時,會為每個處于臨界區(qū)的對象分配唯一的對象鎖。任何線程訪問一個對象中被同步的方法前,首先要取得該對象的對象鎖;同步方法執(zhí)行完畢后,線程會釋放對象的同步鎖。2024/12/24李飛——東北大學秦皇島分校計算中心13/35線程間的通信wait()方法:方法wait()使得當前進程處于阻塞狀態(tài),同時交出對象鎖,從而其他線程就可以取得對象鎖。還可以使用如下格式指定線程的等待時間。wait(longtimeout)wait(longtimeout,intnanos)notifyAll()方法notify()方法2024/12/24李飛——東北大學秦皇島分校計算中心14/35線程組線程組(ThreadGroup):是包括許多線程的對象集,線程組擁有一個名字以及與它相關(guān)的一些屬性,可以用于管理一組線程。相關(guān)方法構(gòu)造線程組中的線程Thread(ThreadGroupgroup,Stringname)通過這個構(gòu)造方法可以創(chuàng)建一個Thread對象,將指定的參數(shù)name作為其名稱,并作為參數(shù)group所引用的線程組的一員。構(gòu)造一個新線程組。ThreadGroup(Stringname) 說明:此方法創(chuàng)建一個新線程組,并且以參數(shù)name的值作為線程組的名字。此線程組的父線程組是目前正在運行線程的線程組。創(chuàng)建一個指定父線程組的線程組。ThreadGroup(ThreadGroupparent,Stringname)2024/12/24李飛——東北大學秦皇島分校計算中心15/35線程組中的常用方法方法名說明getName()返回此線程組的名稱。getParent()返回此線程組的父線程組。getMaxPriority()返回此線程組的最高優(yōu)先級。作為此線程組一部分的線程不能擁有比最高優(yōu)先級更高的優(yōu)先級。isDaemon()測試此線程組是否為一個后臺程序線程組。isDestroyed()測試此線程組是否已經(jīng)被銷毀。setDaemon(boolean
daemon)更改此線程組的后臺程序狀態(tài)。setMaxPriority(int
pri)設置線程組的最高優(yōu)先級。線程組中已有較高優(yōu)先級的線程不受影響。interrupt()中斷此線程組中的所有線程。parentOf(ThreadGroup
g)測試線程組是否為參數(shù)g或
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025外聘人員合同范文
- 工程師勞動合同模板
- 影視音樂錄制合同協(xié)議書范本
- 2025大連市商品混凝土購買合同書范本范文
- 混凝土加工合同協(xié)議書范本
- 2025監(jiān)理工程師考試工程建設合同管理精講班講義打印
- 2025年非臨床安全性評價服務項目立項申請報告模范
- 2025北京租房合同新標準版
- 2025家政服務(保姆)合同
- 2025年釬焊材料項目規(guī)劃申請報告模范
- 城市基礎設施修繕工程的重點與應對措施
- GB 12710-2024焦化安全規(guī)范
- 【??途W(wǎng)】2024秋季校園招聘白皮書
- 2024-2025銀行對公業(yè)務場景金融創(chuàng)新報告
- 2025屆鄭州市高三一診考試英語試卷含解析
- 《我國個人所得稅制下稅收征管問題研究》
- 腫瘤中醫(yī)治療及調(diào)養(yǎng)
- 組長競選課件教學課件
- 2022年公務員多省聯(lián)考《申論》真題(遼寧A卷)及答案解析
- 北師大版四年級下冊數(shù)學第一單元測試卷帶答案
- 術(shù)后肺炎預防和控制專家共識解讀課件
評論
0/150
提交評論