線程

進(jìn)程、線程的定義

  • 進(jìn)程:

對于操作系統(tǒng)來說前痘,一個任務(wù)就是一個進(jìn)程凛捏,比如打開瀏覽器、打開記事本芹缔。

  • 線程:

在一個進(jìn)程內(nèi)部坯癣,需要同時運(yùn)行多個該進(jìn)程內(nèi)部的任務(wù),這些內(nèi)部任務(wù)成為線程最欠,如打開QQ這個進(jìn)程示罗,同時傳輸文件和發(fā)送信息就是該進(jìn)程下的同時進(jìn)行的兩個線程

  • “同時進(jìn)行”真的是同時進(jìn)行嗎蓬网?

這取決于主機(jī)的CPU,如果是多核CPU可以實(shí)現(xiàn)真正意義上的多任務(wù)鹉勒。在單核CPU中則是由操作系統(tǒng)輪流執(zhí)行各個任務(wù)帆锋,以極快的速度交替執(zhí)行各個任務(wù),讓我們誤以為同時進(jìn)行多任務(wù)處理禽额。

  • 同時執(zhí)行多個任務(wù)的解決辦法

1.多進(jìn)程
2.多線程
3.多進(jìn)程+多線程

進(jìn)程和線程的對比

  • 進(jìn)程:

1.操作系統(tǒng)級別作用
2.cpu使用調(diào)度锯厢,數(shù)據(jù)和代碼獨(dú)立
3.多進(jìn)程穩(wěn)定性高,不會影響主進(jìn)程和其他進(jìn)程
4.創(chuàng)建進(jìn)程代價大脯倒,Windows下系統(tǒng)運(yùn)行的進(jìn)程數(shù)有限实辑。

  • 線程:

1.進(jìn)程內(nèi)部的控制流
2.cpu調(diào)度和棧是獨(dú)立的,堆和數(shù)據(jù)是共享的
3.比多進(jìn)程稍快藻丢,但任何一個線程掛掉都會影響整個進(jìn)程剪撬,因為所有線程共享進(jìn)程內(nèi)存


線程實(shí)現(xiàn)的兩種方式

  • 繼承Thread,重寫run()方法
  • 實(shí)現(xiàn)Runnable接口悠反,重寫run()方法

run() : 保存多線程的執(zhí)行代碼
start() : 開啟多線程残黑,啟動run()函數(shù)


線程的生命周期

  • 新建狀態(tài):

使用 new 關(guān)鍵字和 Thread 類或其子類建立一個線程對象后,該線程對象就處于新建狀態(tài)斋否。它保持這個狀態(tài)直到程序 start() 這個線程梨水。

  • 就緒狀態(tài):

當(dāng)線程對象調(diào)用了start()方法之后,該線程就進(jìn)入就緒狀態(tài)茵臭。就緒狀態(tài)的線程處于就緒隊列中疫诽,要等待JVM里線程調(diào)度器的調(diào)度。

  • 運(yùn)行狀態(tài):

如果就緒狀態(tài)的線程獲取 CPU 資源旦委,就可以執(zhí)行 run()奇徒,此時線程便處于運(yùn)行狀態(tài)。處于運(yùn)行狀態(tài)的線程最為復(fù)雜缨硝,它可以變?yōu)樽枞麪顟B(tài)摩钙、就緒狀態(tài)和死亡狀態(tài)。

  • 阻塞狀態(tài):

如果一個線程執(zhí)行了sleep(睡眠)追葡、suspend(掛起)等方法腺律,失去所占用資源之后,該線程就從運(yùn)行狀態(tài)進(jìn)入阻塞狀態(tài)宜肉。在睡眠時間已到或獲得設(shè)備資源后可以重新進(jìn)入就緒狀態(tài)匀钧。可以分為三種:
1.等待阻塞:運(yùn)行狀態(tài)中的線程執(zhí)行 wait() 方法谬返,使線程進(jìn)入到等待阻塞狀態(tài)之斯。
2.同步阻塞:線程在獲取 synchronized 同步鎖失敗(因為同步鎖被其他線程占用)。
3.其他阻塞:通過調(diào)用線程的 sleep() 或 join() 發(fā)出了 I/O 請求時遣铝,線程就會進(jìn)入到阻塞狀態(tài)佑刷。當(dāng)sleep() 狀態(tài)超時莉擒,join() 等待線程終止或超時,或者 I/O 處理完畢瘫絮,線程重新轉(zhuǎn)入就緒狀態(tài)涨冀。

  • 死亡狀態(tài):

一個運(yùn)行狀態(tài)的線程完成任務(wù)或者其他終止條件發(fā)生時,該線程就切換到終止?fàn)顟B(tài)麦萤。
1.正常終止:run()方法執(zhí)行完畢后進(jìn)入此狀態(tài)
2.強(qiáng)制終止:如調(diào)用stop和destroy函數(shù)
3.異常終止:線程執(zhí)行過程中發(fā)生異常


線程常見方法

  • sleep(long millis)線程休眠:暫停一段時間鹿鳖,進(jìn)入計時等待狀態(tài),★注意:此時不會釋放同步鎖
  • join()聯(lián)合線程:表示這個線程(外部)等待另一個線程(內(nèi)部)死亡后才執(zhí)行

線程優(yōu)先級

用一個整數(shù)幫助系統(tǒng)確定線程的調(diào)動順序壮莹,取值范圍1-10翅帜,默認(rèn)為5.線程優(yōu)先級不能保證執(zhí)行順序,只是提高系統(tǒng)調(diào)度的概率命满,而且非常依賴平臺涝滴。


線程禮讓

yield()方法:線程讓出CPU資源,進(jìn)入到就緒狀態(tài)胶台,系統(tǒng)可能會再次調(diào)用該線程歼疮。

sleep()和yield()方法的異同

  • 使當(dāng)前處于運(yùn)行狀態(tài)的線程放棄CPU資源,把機(jī)會讓給其他線程
  • sleep方法會給其他線程運(yùn)行的機(jī)會概作,不考慮優(yōu)先級腋妙;yield方法會優(yōu)先給高優(yōu)先級的線程運(yùn)行機(jī)會
  • 調(diào)用sleep方法后進(jìn)入計時等待狀態(tài);調(diào)用yield方法后進(jìn)入就緒狀態(tài)

wait和notify

wait()讯榕,notify(),notifyAll()是Object的方法
未完待續(xù)匙睹。愚屁。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痕檬,一起剝皮案震驚了整個濱河市霎槐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梦谜,老刑警劉巖丘跌,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唁桩,居然都是意外死亡闭树,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門荒澡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窄驹,“玉大人拣挪,你說我怎么就攤上這事敬特÷计剑” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵背捌,是天一觀的道長。 經(jīng)常有香客問我,道長爽篷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任慢睡,我火速辦了婚禮逐工,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘一睁。我一直安慰自己钻弄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布者吁。 她就那樣靜靜地躺著窘俺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪复凳。 梳的紋絲不亂的頭發(fā)上瘤泪,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音育八,去河邊找鬼对途。 笑死,一個胖子當(dāng)著我的面吹牛髓棋,可吹牛的內(nèi)容都是我干的实檀。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼按声,長吁一口氣:“原來是場噩夢啊……” “哼膳犹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起须床,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎豺旬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族阅,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年扛拨,在試婚紗的時候發(fā)現(xiàn)自己被綠了耘分。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡央渣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渴频,到底是詐尸還是另有隱情芽丹,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布卜朗,位于F島的核電站拔第,受9級特大地震影響场钉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逛万,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宇植。 院中可真熱鬧,春花似錦忙上、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽手形。三九已至悯恍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涮毫,已是汗流浹背贷屎。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唉侄,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓恬叹,卻偏偏與公主長得像候生,于是被迫代替她去往敵國和親绽昼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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

  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對應(yīng)一個進(jìn)程,當(dāng)一個程序進(jìn)入內(nèi)存運(yùn)行時,即變成一個進(jìn)程.進(jìn)程是處于運(yùn)行過程中...
    勝浩_ae28閱讀 5,091評論 0 23
  • ??一個任務(wù)通常就是一個程序目溉,每個運(yùn)行中的程序就是一個進(jìn)程菱农。當(dāng)一個程序運(yùn)行時,內(nèi)部可能包含了多個順序執(zhí)行流循未,每個順...
    OmaiMoon閱讀 1,664評論 0 12
  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對應(yīng)一個進(jìn)程,當(dāng)一個程序進(jìn)入內(nèi)存運(yùn)行時,即變成一個進(jìn)程.進(jìn)程是處于運(yùn)行過程中...
    小徐andorid閱讀 2,801評論 3 53
  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類 二實(shí)現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,952評論 1 18
  • 本文主要講了java中多線程的使用方法只厘、線程同步、線程數(shù)據(jù)傳遞羔味、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等赋元。 首先講...
    李欣陽閱讀 2,444評論 1 15