《Java程序設(shè)計》課件-javaCP12線程_第1頁
《Java程序設(shè)計》課件-javaCP12線程_第2頁
《Java程序設(shè)計》課件-javaCP12線程_第3頁
《Java程序設(shè)計》課件-javaCP12線程_第4頁
《Java程序設(shè)計》課件-javaCP12線程_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第十二章線程

Java程序設(shè)計本章主要內(nèi)容

概述線程的創(chuàng)建方法線程的基本操作線程組小結(jié)2024/12/24李飛——計算中心2/30概述程序:指由計算機(jī)語言的語句組成的用于解決一個實(shí)際問題的語句集合。程序是一段靜態(tài)的代碼,它可以看成驅(qū)動計算機(jī)硬件完成某一功能的執(zhí)行腳本。進(jìn)程:程序的一次運(yùn)行稱為一個進(jìn)程(Process),它是計算機(jī)系統(tǒng)進(jìn)行軟硬件資源分配和調(diào)度的一個獨(dú)立單位。進(jìn)程可以并發(fā),在多個進(jìn)程并發(fā)運(yùn)行時,會出現(xiàn)運(yùn)行、阻塞和就緒三種狀態(tài),并依據(jù)一定的條件而相互轉(zhuǎn)換。線程:也被稱為輕量級進(jìn)程(LightweightProcess,LWP)。線程是程序執(zhí)行流的最小單元;是程序中的一個單一的順序控制流程;是進(jìn)程內(nèi)一個相對獨(dú)立的、可調(diào)度的執(zhí)行單元;是系統(tǒng)獨(dú)立調(diào)度和分派CPU的基本單位;是運(yùn)行中的程序的最小調(diào)度單位。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心3/35進(jìn)程、線程之間的關(guān)系2024/12/24李飛——東北大學(xué)秦皇島分校計算中心4/35線程的狀態(tài)

新建狀態(tài):剛剛創(chuàng)建的線程就處于新建狀態(tài)。2.就緒狀態(tài)。就緒狀態(tài):也稱可運(yùn)行狀態(tài),處于新建狀態(tài)的線程被啟動后,是指線程具備運(yùn)行的所有條件,邏輯上可以運(yùn)行,在等待處理機(jī)的運(yùn)行,一旦輪到它使用處理機(jī)資源,它就可以開始運(yùn)行了。運(yùn)行狀態(tài):運(yùn)行狀態(tài)是指線程占有處理機(jī)正在運(yùn)行時的狀態(tài)。阻塞狀態(tài):阻塞狀態(tài)是指正在運(yùn)行狀態(tài)的線程在某些特殊情況下,需要讓出處理機(jī)資源,并暫時終止自己的運(yùn)行。這時線程處于不可運(yùn)行的狀態(tài),這就好比旅客已經(jīng)登上火車,在火車運(yùn)行過程中忽然臨時停車,以避讓其他火車時的狀態(tài)。消亡狀態(tài):處于消亡狀態(tài)的線程不具備繼續(xù)運(yùn)行的能力。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心5/35線程狀態(tài)之間的轉(zhuǎn)換線程在以下幾種情況中會進(jìn)入阻塞狀態(tài)。1)調(diào)用sleep()方法或yield()方法。2)為等候一個條件,線程調(diào)用wait()方法。3)該線程與另一個線程join在一起。導(dǎo)致線程進(jìn)入消亡狀態(tài)的原因有兩個。1)正常運(yùn)行的線程完成了它的全部工作。2)當(dāng)進(jìn)程因故停止運(yùn)行時,該進(jìn)程中的所有線程將被強(qiáng)行終止。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心6/352線程的創(chuàng)建方法

1通過繼承Thread類創(chuàng)建線程從Thread類派生一個子類,在類中一定要重寫run()方法。用這個子類創(chuàng)建一個對象。調(diào)用這個對象的start()方法,用于啟動線程。2用Runnable接口創(chuàng)建線程在定義自己的類時說明該類繼承Runnable接口。在類定義中實(shí)現(xiàn)run()方法。在調(diào)用線程的類中建立自定義的類的實(shí)例對象R。在調(diào)用線程的類中用Thread類的構(gòu)造方法Thread(R)通過對象R來創(chuàng)建線程對象。調(diào)用線程對象的start()方法,啟動線程。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心7/35通過Thread類創(chuàng)建線程的代碼框架classMyThreadextendsThread{

成員變量;

成員方法; publicvoidrun(){ //線程需要完成的功能對應(yīng)的代碼 }}publicclassTestThread{ publicstaticvoidmain(String[]args){ MyThreadthread1=newMyThread(); //使用start方法啟動線程 thread1.start(); }}

2024/12/24李飛——東北大學(xué)秦皇島分校計算中心8/35通過Runnable接口創(chuàng)建線程的代碼框架classMyThreadimplementsRunnable{

成員變量;

成員方法; publicvoidrun(){ //線程需要完成的功能對應(yīng)的代碼 }}publicclassTestThread{ publicstaticvoidmain(String[]args){ MyThreadt=newMyThread();//創(chuàng)建實(shí)現(xiàn)Runnable接口的類的對象//通過實(shí)現(xiàn)Runnable接口的類的對象創(chuàng)建線程類對象Threadthread1=newThread(t1); //使用start方法啟動線程 thread1.start(); }}

2024/12/24李飛——東北大學(xué)秦皇島分校計算中心9/353線程的基本操作線程類中的常用方法2024/12/24李飛——東北大學(xué)秦皇島分校計算中心10/35方法名功能start()啟動線程對象。run()定義線程體,即定義線程啟動后所執(zhí)行的操作。wait()使線程處于等待狀態(tài)。isAlive()測試線程是否在活動。setPriority(intpriority)設(shè)置線程的優(yōu)先級。yield()強(qiáng)行終止線程的執(zhí)行。sleep(intmillsecond)使線程休眠一段時間,時間長短由參數(shù)millsecond決定,單位是毫秒。join(longmillis)等待該線程終止。等待該線程終止的時間最長為millis毫秒。1線程的啟動創(chuàng)建線程對象Tt.start();//線程啟動2024/12/24李飛——東北大學(xué)秦皇島分校計算中心11/35線程的調(diào)度Java的線程調(diào)度策略:

多線程系統(tǒng)會自動為每個線程分配一個優(yōu)先級,默認(rèn)時,繼承父類的優(yōu)先級。優(yōu)先級高的線程先執(zhí)行,優(yōu)先級低的線程后執(zhí)行。任務(wù)緊急的線程,其優(yōu)先級較高。優(yōu)先級相同的線程,按先進(jìn)先出的原則排隊運(yùn)行。線程的優(yōu)先級分為10級,在線程類Thread中,Java設(shè)置了3個和優(yōu)先級相關(guān)的靜態(tài)量。1)MAX_PRIORITY:表示線程可以具有的最高優(yōu)先級,值為10。2)MIN_PRIORITY:表示線程可以具有的最低優(yōu)先級,值為1。3)NORM_PRIORITY:表示分配給線程的默認(rèn)優(yōu)先級,值為5。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心12/35線程的同步保留字synchronized:Synchronized是聲明對象需要同步的保留字,其作用是使被聲明的方法處于同步使用狀態(tài)。Synchronized保留字寫在方法前,用于向程序說明該方法處于同步狀態(tài)。為說明Synchronized保留字的使用,我們先介紹一下臨界區(qū)和對象鎖的概念。臨界區(qū):在Java中我們稱多線程并發(fā)運(yùn)行時,線程訪問相同對象的代碼段為臨界區(qū)。臨界區(qū)可以是一個代碼塊或一個方法。對象鎖:Java運(yùn)行系統(tǒng)在執(zhí)行具有保留字synchronized聲明的方法時,會為每個處于臨界區(qū)的對象分配唯一的對象鎖。任何線程訪問一個對象中被同步的方法前,首先要取得該對象的對象鎖;同步方法執(zhí)行完畢后,線程會釋放對象的同步鎖。2024/12/24李飛——東北大學(xué)秦皇島分校計算中心13/35線程間的通信wait()方法:方法wait()使得當(dāng)前進(jìn)程處于阻塞狀態(tài),同時交出對象鎖,從而其他線程就可以取得對象鎖。還可以使用如下格式指定線程的等待時間。wait(longtimeout)wait(longtimeout,intnanos)notifyAll()方法notify()方法2024/12/24李飛——東北大學(xué)秦皇島分校計算中心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的值作為線程組的名字。此線程組的父線程組是目前正在運(yùn)行線程的線程組。創(chuàng)建一個指定父線程組的線程組。ThreadGroup(ThreadGroupparent,Stringname)2024/12/24李飛——東北大學(xué)秦皇島分校計算中心15/35線程組中的常用方法方法名說明getName()返回此線程組的名稱。getParent()返回此線程組的父線程組。getMaxPriority()返回此線程組的最高優(yōu)先級。作為此線程組一部分的線程不能擁有比最高優(yōu)先級更高的優(yōu)先級。isDaemon()測試此線程組是否為一個后臺程序線程組。isDestroyed()測試此線程組是否已經(jīng)被銷毀。setDaemon(boolean

daemon)更改此線程組的后臺程序狀態(tài)。setMaxPriority(int

pri)設(shè)置線程組的最高優(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)容里面會有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論