国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Java高級(jí)-解析Java中的多線程機(jī)制 — JAVA頻道

線程的狀態(tài)控制



在這里需要明確的是:無(wú)論采用繼承Thread類(lèi)還是實(shí)現(xiàn)Runnable接口來(lái)實(shí)現(xiàn)應(yīng)用程序的多線程能力,都需要在該類(lèi)中定義用于完成實(shí)際功能的run方法,這個(gè)run方法稱(chēng)為線程體(ThreadBody)。按照線程體在計(jì)算機(jī)系統(tǒng)內(nèi)存中的狀態(tài)不同,可以將線程分為創(chuàng)建、就緒、運(yùn)行、睡眠、掛起和死亡等類(lèi)型。這些線程狀態(tài)類(lèi)型下線程的特征為:

創(chuàng)建狀態(tài):當(dāng)利用new關(guān)鍵字創(chuàng)建線程對(duì)象實(shí)例后,它僅僅作為一個(gè)對(duì)象實(shí)例存在,JVM沒(méi)有為其分配CPU時(shí)間片等線程運(yùn)行資源;

就緒狀態(tài):在處于創(chuàng)建狀態(tài)的線程中調(diào)用start方法將線程的狀態(tài)轉(zhuǎn)換為就緒狀態(tài)。這時(shí),線程已經(jīng)得到除CPU時(shí)間之外的其它系統(tǒng)資源,只等JVM的線程調(diào)度器按照線程的優(yōu)先級(jí)對(duì)該線程進(jìn)行調(diào)度,從而使該線程擁有能夠獲得CPU時(shí)間片的機(jī)會(huì)。

睡眠狀態(tài):在線程運(yùn)行過(guò)程中可以調(diào)用sleep方法并在方法參數(shù)中指定線程的睡眠時(shí)間將線程狀態(tài)轉(zhuǎn)換為睡眠狀態(tài)。這時(shí),該線程在不釋放占用資源的情況下停止運(yùn)行指定的睡眠時(shí)間。時(shí)間到達(dá)后,線程重新由JVM線程調(diào)度器進(jìn)行調(diào)度和管理。

掛起狀態(tài):可以通過(guò)調(diào)用suspend方法將線程的狀態(tài)轉(zhuǎn)換為掛起狀態(tài)。這時(shí),線程將釋放占用的所有資源,由JVM調(diào)度轉(zhuǎn)入臨時(shí)存儲(chǔ)空間,直至應(yīng)用程序調(diào)用resume方法恢復(fù)線程運(yùn)行。

死亡狀態(tài):當(dāng)線程體運(yùn)行結(jié)束或者調(diào)用線程對(duì)象的stop方法后線程將終止運(yùn)行,由JVM收回線程占用的資源。

在Java線程類(lèi)中分別定義了相應(yīng)的方法,用于在應(yīng)用程序中對(duì)線程狀態(tài)進(jìn)行控制和管理。

線程的調(diào)度

線程調(diào)用的意義在于JVM應(yīng)對(duì)運(yùn)行的多個(gè)線程進(jìn)行系統(tǒng)級(jí)的協(xié)調(diào),以避免多個(gè)線程爭(zhēng)用有限資源而導(dǎo)致應(yīng)用系統(tǒng)死機(jī)或者崩潰。

為了線程對(duì)于操作系統(tǒng)和用戶的重要性區(qū)分開(kāi),Java定義了線程的優(yōu)先級(jí)策略。Java將線程的優(yōu)先級(jí)分為10個(gè)等級(jí),分別用1-10之間的數(shù)字表示。數(shù)字越大表明線程的級(jí)別越高。相應(yīng)地,在Thread類(lèi)中定義了表示線程最低、最高和普通優(yōu)先級(jí)的成員變量MIN_PRIORITY、MAX_PRIORITY和NORMAL_PRIORITY,代表的優(yōu)先級(jí)等級(jí)分別為1、10和5。當(dāng)一個(gè)線程對(duì)象被創(chuàng)建時(shí),其默認(rèn)的線程優(yōu)先級(jí)是5。

為了控制線程的運(yùn)行策略,Java定義了線程調(diào)度器來(lái)監(jiān)控系統(tǒng)中處于就緒狀態(tài)的所有線程。線程調(diào)度器按照線程的優(yōu)先級(jí)決定那個(gè)線程投入處理器運(yùn)行。在多個(gè)線程處于就緒狀態(tài)的條件下,具有高優(yōu)先級(jí)的線程會(huì)在低優(yōu)先級(jí)線程之前得到執(zhí)行。線程調(diào)度器同樣采用"搶占式"策略來(lái)調(diào)度線程執(zhí)行,即當(dāng)前線程執(zhí)行過(guò)程中有較高優(yōu)先級(jí)的線程進(jìn)入就緒狀態(tài),則高優(yōu)先級(jí)的線程立即被調(diào)度執(zhí)行。具有相同優(yōu)先級(jí)的所有線程采用輪轉(zhuǎn)的方式來(lái)共同分配CPU時(shí)間片。

在應(yīng)用程序中設(shè)置線程優(yōu)先級(jí)的方法很簡(jiǎn)單,在創(chuàng)建線程對(duì)象之后可以調(diào)用線程對(duì)象的setPriority方法改變?cè)摼€程的運(yùn)行優(yōu)先級(jí),同樣可以調(diào)用getPriority方法獲取當(dāng)前線程的優(yōu)先級(jí)。

在Java中比較特殊的線程是被稱(chēng)為守護(hù)(Daemon)線程的低級(jí)別線程。這個(gè)線程具有最低的優(yōu)先級(jí),用于為系統(tǒng)中的其它對(duì)象和線程提供服務(wù)。將一個(gè)用戶線程設(shè)置為守護(hù)線程的方式是在線程對(duì)象創(chuàng)建之前調(diào)用線程對(duì)象的setDaemon方法。典型的守護(hù)線程例子是JVM中的系統(tǒng)資源自動(dòng)回收線程,它始終在低級(jí)別的狀態(tài)中運(yùn)行,用于實(shí)時(shí)監(jiān)控和管理系統(tǒng)中的可回收資源。

線程分組管理

Java定義了在多線程運(yùn)行系統(tǒng)中的線程組(ThreadGroup)對(duì)象,用于實(shí)現(xiàn)按照特定功能對(duì)線程進(jìn)行集中式分組管理。用戶創(chuàng)建的每個(gè)線程均屬于某線程組,這個(gè)線程組可以在線程創(chuàng)建時(shí)指定,也可以不指定線程組以使該線程處于默認(rèn)的線程組之中。但是,一旦線程加入某線程組,該線程就一直存在于該線程組中直至線程死亡,不能在中途改變線程所屬的線程組。

當(dāng)Java的Application應(yīng)用程序運(yùn)行時(shí),JVM創(chuàng)建名稱(chēng)為main的線程組。除非單獨(dú)指定,在該應(yīng)用程序中創(chuàng)建的線程均屬于main線程組。在main線程組中可以創(chuàng)建其它名稱(chēng)的線程組并將其它線程加入到該線程組中,依此類(lèi)推,構(gòu)成線程和線程組之間的樹(shù)型管理和繼承關(guān)系。

與線程類(lèi)似,可以針對(duì)線程組對(duì)象進(jìn)行線程組的調(diào)度、狀態(tài)管理以及優(yōu)先級(jí)設(shè)置等。在對(duì)線程組進(jìn)行管理過(guò)程中,加入到某線程組中的所有線程均被看作統(tǒng)一的對(duì)象。 

小結(jié)

 

本文針對(duì)Java平臺(tái)中線程的性質(zhì)和應(yīng)用程序的多線程策略進(jìn)行了分析和講解。與其它操作系統(tǒng)環(huán)境不同,Java運(yùn)行環(huán)境中的線程類(lèi)似于多用戶、多任務(wù)操作系統(tǒng)環(huán)境下的進(jìn)程,但在進(jìn)程和線程的運(yùn)行及創(chuàng)建方式等方面,進(jìn)程與Java線程具有明顯區(qū)別。

Unix操作系統(tǒng)環(huán)境下,應(yīng)用程序可以利用fork函數(shù)創(chuàng)建子進(jìn)程,但子進(jìn)程與該應(yīng)用程序進(jìn)程擁有獨(dú)立的地址空間、系統(tǒng)資源和代碼執(zhí)行單元,并且進(jìn)程的調(diào)度是由操作系統(tǒng)來(lái)完成的,使得在應(yīng)用進(jìn)程之間進(jìn)行通信和線程協(xié)調(diào)相對(duì)復(fù)雜。而Java應(yīng)用程序中的多線程則是共享同一應(yīng)用系統(tǒng)資源的多個(gè)并行代碼執(zhí)行體,線程之間的通信和協(xié)調(diào)方法相對(duì)簡(jiǎn)單。

可以說(shuō):Java語(yǔ)言對(duì)應(yīng)用程序多線程能力的支持增強(qiáng)了Java作為網(wǎng)絡(luò)程序設(shè)計(jì)語(yǔ)言的優(yōu)勢(shì),為實(shí)現(xiàn)分布式應(yīng)用系統(tǒng)中多客戶端的并發(fā)訪問(wèn)以及提高服務(wù)器的響應(yīng)效率奠定堅(jiān)實(shí)基礎(chǔ)。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
編程中國(guó)-解析Java的多線程機(jī)制
JAVA培訓(xùn)Java多線程編程精要
多線程
java多線程-概念&創(chuàng)建啟動(dòng)&中斷&守護(hù)線程&優(yōu)先級(jí)&線程狀態(tài)(多線程編程之一)
學(xué)習(xí)Java多線程之線程定義、狀態(tài)和屬性
深入淺出:JAVA多線程編程實(shí)戰(zhàn)-基礎(chǔ)篇
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服