資源描述:
《java語言多線程編程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第八章Java語言多線程編程一、線程的概念二、線程的實現(xiàn)方法三、線程的同步與死鎖四、多線程程序?qū)嵗弧⒕€程的概念進程與線程進程是指可執(zhí)行程序并存放在計算機存儲器空間的一個指令序列,它是一個動態(tài)執(zhí)行的過程。進程是計算機多任務(wù)操作系統(tǒng)為任務(wù)分配資源的最小單位,每個進程都應(yīng)該有自己的內(nèi)存空間。線程同進程一樣,也是一個動態(tài)的概念和一個動態(tài)的執(zhí)行過程,但是線程比進程的內(nèi)涵要小一個等級,一般一個進程(應(yīng)用程序)包含一個或多個線程,線程需要在進程的內(nèi)存地址空間中運行,是多任務(wù)操作系統(tǒng)用于分配計算機CPU時間片的最小單位。一、線程的概念一個Java多線程程序在Java虛擬機中執(zhí)行時,每一個線程
2、的執(zhí)行過程是由Java執(zhí)行系統(tǒng)的線程調(diào)度來控制的,Java語言多線程程序自身是不能控制每個線程執(zhí)行順序的。在目前的多任務(wù)操作系統(tǒng)中,當(dāng)一個單一線程被啟動以后,它可以被掛起來,被掛起的線程程序代碼并不從計算機內(nèi)存中清除,只是暫時不讓它執(zhí)行了,在內(nèi)存中被掛起的線程還可以重新被恢復(fù)執(zhí)行,以便保證實現(xiàn)多任務(wù)被同時處理。多任務(wù)操作系統(tǒng)在任何時間都可以停止或終止線程,被終止的線程程序代碼將被從計算機內(nèi)存中清除,被終止的線程是不能再重新恢復(fù)執(zhí)行的。一、線程的概念線程調(diào)度與優(yōu)先級在CPU上以某種次序執(zhí)行多個線程稱為調(diào)度,調(diào)度使JVM對運行的多個線程進行協(xié)調(diào),以避免多個線程爭用有限的系統(tǒng)資源而導(dǎo)
3、致系統(tǒng)死機或崩潰。為控制線程的協(xié)調(diào)運行,Java定義了線程監(jiān)視器來監(jiān)控系統(tǒng)中處于就緒狀態(tài)的所有線程,線程調(diào)度采用“搶占式”策略,按照線程的優(yōu)先級別選擇線程獲得處理器。線程優(yōu)先級(Priority)告訴線程監(jiān)視器該線程的重要性,如果有大量線程被堵塞并等候運行時,線程監(jiān)視器按線程的優(yōu)先級別對線程排隊,一旦空閑,線程監(jiān)視器會首先選擇運行具有最高優(yōu)先級的那個線程。當(dāng)然這并不表示優(yōu)先級別較低的線程不會運行,即線程不會因為存在優(yōu)先級而導(dǎo)致死鎖。一、線程的概念Java將線程的優(yōu)先級分為10個等級,分別用1~10之間的數(shù)字表示,數(shù)字越大表明線程的優(yōu)先級別越高。Thread類中定義了代表線程優(yōu)先
4、級的三個靜態(tài)整型數(shù)據(jù)成員MIN_PRIORITY、MAX_PRIORITY和NORMAL_PRIORITY,分別對應(yīng)于線程的最高優(yōu)先級(10)、最低優(yōu)先級(1)和普通線程優(yōu)先級(5)。當(dāng)創(chuàng)建一個線程對象時,其默認(rèn)的優(yōu)先級別是5。一個線程的優(yōu)先級別可以通過調(diào)用Thread類中的getPriority()方法來獲得,而通過調(diào)用setPriority()方法可以改變一個線程的優(yōu)先級別。一、線程的概念線程的狀態(tài)與生命周期每個線程都與生命周期相關(guān)聯(lián),一個生命周期含有多個可以互相轉(zhuǎn)換的狀態(tài),線程從產(chǎn)生到消亡的生命周期中要經(jīng)歷創(chuàng)建、就緒、運行、阻塞和死亡五種狀態(tài)。通過線程的控制與調(diào)度可使線程
5、在這幾個狀態(tài)間轉(zhuǎn)換,每個Java程序中都擁有一個與main方法對應(yīng)的主線程,必須在主線程中創(chuàng)建新的線程。(1)創(chuàng)建狀態(tài):當(dāng)一個Thread類或其子類的對象被聲明并創(chuàng)建后,該線程對象就處于創(chuàng)建狀態(tài)。創(chuàng)建狀態(tài)是線程已經(jīng)創(chuàng)建但未開始執(zhí)行的一個特殊狀態(tài)。處于創(chuàng)建狀態(tài)的線程只是一個空的線程對象,系統(tǒng)不為它分配資源但有自己的內(nèi)存空間,通過調(diào)用start()方法進入就緒狀態(tài)。一、線程的概念(2)就緒狀態(tài):處于就緒狀態(tài)的線程已經(jīng)具備運行條件但還未獲得時間片,因此進入線程隊列,等待系統(tǒng)為其分配CPU。一旦獲得CPU,該線程便進入運行狀態(tài)并自動調(diào)用自己的Run()方法。(3)運行狀態(tài):當(dāng)就緒狀態(tài)的
6、線程被調(diào)度并獲得處理器資源時便進入運行狀態(tài),這時開始執(zhí)行run()方法中的代碼,直到調(diào)用其他方法而終止,或等待某資源而阻塞,或運行完畢而死亡。(4)堵塞狀態(tài):處于運行狀態(tài)的線程在某些情況下,如執(zhí)行睡眠方法或等待I/O設(shè)備操作時,將讓出CPU并暫時終止自己的運行進入阻塞狀態(tài)。阻塞時線程不能進入就緒隊列,只有當(dāng)引起阻塞的原因消除時,線程才可以轉(zhuǎn)入就緒狀態(tài),重新進入線程隊列等待調(diào)度。(5)死亡狀態(tài):死亡狀態(tài)是線程生命周期的最后一個階段,表示線程已經(jīng)退出運行狀態(tài)并且不再進入就緒隊列。當(dāng)線程的run()方法結(jié)束或由于其它原因被終止后,線程便進入消亡狀態(tài)。線程的終止分為兩種形式:一是自然死
7、亡即線程的run()方法正常結(jié)束,二是強制終止線程,如調(diào)用destory()或stop()命令終止線程。一、線程的概念一個線程的生命周期分為生成、運行、等待、終止等階段,各階段及狀態(tài)間的轉(zhuǎn)換條件具體如圖所示死亡Start睡眠掛起等待就緒運行RUNnotifyI/O完成定時到ResumeStopWait請求I/OSleepSuspend創(chuàng)建阻塞一、線程的概念說明:控制一個線程生命周期最常用的方法有start()方法(啟動一個線程)、run()方法(定義線程動作)、sleep()方法(使線程睡眠