【Java多線程系列】實現(xiàn)與應(yīng)用(3)線程的優(yōu)先級

本篇屬于【Java多線程系列】文章第二章【多線程編程的實現(xiàn)與應(yīng)用】的第三小節(jié)內(nèi)容肠牲,我們會來學(xué)習(xí)線程的優(yōu)先級概念违崇。

線程的調(diào)度

在學(xué)習(xí)的優(yōu)先級概念前阿弃,我們先要了解Java的線程調(diào)度系統(tǒng)。在Java中主要有兩種主要的調(diào)度方式 :

(1)協(xié)同式線程調(diào)度(Cooperative )?

(2)搶占式線程調(diào)度(PreemptiveThreads-Scheduling)

協(xié)同式線程調(diào)度

使用協(xié)同式調(diào)度的多線程系統(tǒng)羞延,線程的執(zhí)行時間由線程本身來控制渣淳,線程把自己的工作執(zhí)行完了之后,要主動通知系統(tǒng)切換到另外一個線程上伴箩。

協(xié)同式多線程的最大好處是實現(xiàn)簡單入愧,而且由于線程要把自己的事情干完后才會進行線程切換,切換操作對線程自己是可知的嗤谚,所以沒有什么線程同步的問題棺蛛。Lua語言中的“協(xié)同例程”就是這類實現(xiàn)。

它的壞處也很明顯:線程執(zhí)行時間不可控制巩步,甚至如果一個線程編寫的問題旁赊,一直不告知系統(tǒng)進行線程切換,那么程序就會一直阻塞在那里椅野。很久以前的Windows3.x系統(tǒng)就是使用協(xié)同式來實現(xiàn)多線程多任務(wù)的终畅,相當不穩(wěn)定,一個進程堅持不讓出CPU執(zhí)行時間就可能會導(dǎo)致整個系統(tǒng)崩潰竟闪。

搶占式線程調(diào)度

搶占式調(diào)度的多線程系統(tǒng)声离,那么每個線程將由系統(tǒng)來分配執(zhí)行時間,線程的切換不由線程本身來決定(在Java中瘫怜,Thread.yield()可以讓出執(zhí)行時間术徊,但是要獲取執(zhí)行時間的話,線程本身是沒有什么辦法的)鲸湃。

在這種實現(xiàn)線程調(diào)度的方式下赠涮,線程的執(zhí)行時間是系統(tǒng)可控的,也不會有一個線程導(dǎo)致整個進程阻塞的問題暗挑,Java使用的線程調(diào)度方式就是搶占式調(diào)度笋除。與前面所說的Windows3.x的例子相對,在Windows9x/NT內(nèi)核中就是使用搶占式來實現(xiàn)多進程的炸裆,當一個進程除了問題垃它,我們還可以使用任務(wù)管理器把這個進程殺掉,而不至于導(dǎo)致系統(tǒng)崩潰。

雖然Java線程調(diào)度是系統(tǒng)自動完成的国拇,但是我們還是可以“建議”系統(tǒng)給默寫線程多分配一點執(zhí)行時間洛史,另外的一些線程則可以少分配一點,這項操作可以通過設(shè)置線程優(yōu)先級來完成酱吝。Java語言一共設(shè)置了10個級別的線程優(yōu)先級(Thread.MIN_PRIORITY至Thread.MAX_PRIORITY)也殖,這兩個線程同時處于Ready狀態(tài)時,優(yōu)先級越高的線程越容易被系統(tǒng)選擇執(zhí)行务热。

線程的優(yōu)先級

線程的優(yōu)先級代表該線程的重要程度忆嗜。如果有大量線程都被堵塞,都在等候運行崎岂,會盡可能地運行優(yōu)先級比較的線程捆毫。

但這并不表示優(yōu)先級較低的線程不會運行。若程序的優(yōu)先級較低冲甘,只不過表示它被允許執(zhí)行的機會小一些而已冻璃。

Thread.currentThread().getPriority()?//獲得當前線程的優(yōu)先級

public final void setPriority(int newPriority) //設(shè)置線程的優(yōu)先級

線程的優(yōu)先級設(shè)置可以為1-10的任一數(shù)值, Thread類中定義了三個線程優(yōu)先級, 分別是:MIN_PRIORITY(1)、NORM_PRIORITY(5)损合、MAX_PRIORITY(10), 一般情況下推薦使用這幾個常量, 不要自行設(shè)置數(shù)值省艳。

不同平臺, 對線程的優(yōu)先級的支持不同,編程的時候不要過度依賴線程優(yōu)先級嫁审。程序的運行順序不能完全依賴于設(shè)置的優(yōu)先級順序跋炕。

本文系【程序因子】版權(quán)作品,未經(jīng)授權(quán)嚴禁轉(zhuǎn)載律适,同時也歡關(guān)注同名公眾號【程序因子】迎投稿及合作辐烂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者捂贿。
  • 序言:七十年代末纠修,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厂僧,更是在濱河造成了極大的恐慌扣草,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颜屠,死亡現(xiàn)場離奇詭異辰妙,居然都是意外死亡,警方通過查閱死者的電腦和手機甫窟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門密浑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粗井,你說我怎么就攤上這事尔破〗滞迹” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵懒构,是天一觀的道長餐济。 經(jīng)常有香客問我,道長痴脾,這世上最難降的妖魔是什么颤介? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任梳星,我火速辦了婚禮赞赖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冤灾。我一直安慰自己前域,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布韵吨。 她就那樣靜靜地躺著匿垄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪归粉。 梳的紋絲不亂的頭發(fā)上椿疗,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音糠悼,去河邊找鬼届榄。 笑死,一個胖子當著我的面吹牛倔喂,可吹牛的內(nèi)容都是我干的铝条。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼席噩,長吁一口氣:“原來是場噩夢啊……” “哼班缰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悼枢,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤埠忘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馒索,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體给梅,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年双揪,在試婚紗的時候發(fā)現(xiàn)自己被綠了动羽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡渔期,死狀恐怖运吓,靈堂內(nèi)的尸體忽然破棺而出渴邦,到底是詐尸還是另有隱情,我是刑警寧澤拘哨,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布谋梭,位于F島的核電站,受9級特大地震影響倦青,放射性物質(zhì)發(fā)生泄漏瓮床。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一产镐、第九天 我趴在偏房一處隱蔽的房頂上張望隘庄。 院中可真熱鬧,春花似錦癣亚、人聲如沸丑掺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肘交,卻和暖如春玻孟,著一層夾襖步出監(jiān)牢的瞬間唆缴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工黍翎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留面徽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓玩敏,卻偏偏與公主長得像斗忌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旺聚,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 作者:楊興強原文來源:開點工作室(ID:kaidiancs) 一.從一個例子開始 看著Java線程執(zhí)行起來的那種任...
    開點工作室閱讀 6,771評論 2 28
  • 本文主要講了java中多線程的使用方法织阳、線程同步、線程數(shù)據(jù)傳遞砰粹、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法唧躲、概述等。 首先講...
    李欣陽閱讀 2,454評論 1 15
  • Java多線程學(xué)習(xí) [-] 一擴展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,957評論 1 18
  • 除了充分利用計算機處理器的能力外碱璃,一個服務(wù)端同時對多個客戶端提供服務(wù)則是另一個更具體的并發(fā)應(yīng)用場景弄痹。衡量一個服務(wù)性...
    胡二囧閱讀 1,340評論 0 12
  • 一、認識多任務(wù)嵌器、多進程肛真、單線程、多線程 要認識多線程就要從操作系統(tǒng)的原理說起爽航。 以前古老的DOS操作系統(tǒng)(V 6....
    GT921閱讀 1,013評論 0 3