線程基礎(chǔ)

線程與進程

線程:進程中負責程序執(zhí)行的執(zhí)行單元,線程本身依靠程序進行運行,線程是程序中的順序控制流,只能使用分配給程序的資源和環(huán)境笆载。
進程:執(zhí)行中的程序,一個進程至少包含一個線程。
可以將一個正在運行的.exe程序理解為一個進程


image.png

線程是進程中獨立運行的子任務(wù)凉驻,比如QQ.exe有視屏線程腻要、下載文件線程、傳輸數(shù)據(jù)線程等在后臺默默的運行涝登。線程允許在一個進程中存在多個程序控制流雄家,線程會共享進程范圍的資源,例如內(nèi)存句柄和文件句柄胀滚,但每個線程都有各自的計數(shù)器趟济、棧和局部變量等。線程可以看做一個基本的調(diào)度單位咽笼,如果沒有明確的協(xié)同機制顷编,那么線程將彼此獨立運行。當一個線程訪在使用一個變量剑刑,而另一個線程在同時訪問這個變量時將造成不可預(yù)料的后果媳纬。

多線程的優(yōu)點:充分使用cpu資源


image.png

如果任務(wù)一等待遠程服務(wù)器返回數(shù)據(jù),那么cpu就會一直處于等待狀態(tài)任務(wù)二必須等任務(wù)一運行完之后才能運行施掏,CPU利用率大幅度降低钮惠。

使用多線程

繼承Thread類

創(chuàng)建好了自己的線程類之后,就可以創(chuàng)建線程對象了七芭,然后通過start()方法去啟動線程萌腿。注意,不是調(diào)用run()方法啟動線程抖苦,run方法中只是定義需要執(zhí)行的任務(wù)毁菱,如果調(diào)用run方法,即相當于在主線程中執(zhí)行run方法锌历,跟普通的方法調(diào)用沒有任何區(qū)別

實現(xiàn)Runnable接口

Runnable的中文意思是“任務(wù)”贮庞,顧名思義,通過實現(xiàn)Runnable接口究西,我們定義了一個子任務(wù)窗慎,然后將子任務(wù)交由Thread去執(zhí)行。注意卤材,這種方式必須將Runnable作為Thread類的參數(shù)遮斥,然后通過Thread的start方法來創(chuàng)建一個新線程來執(zhí)行該子任務(wù)。如果調(diào)用Runnable的run方法的話扇丛,是不會創(chuàng)建新線程的术吗,這根普通的方法調(diào)用沒有任何區(qū)別。


圖片.png

線程狀態(tài)

1帆精、新建狀態(tài)(New):新創(chuàng)建了一個線程對象较屿。
2隧魄、就緒狀態(tài)(Runnable):線程對象創(chuàng)建后,其他線程調(diào)用了該對象的start()方法隘蝎。該狀態(tài)的線程位于可運行線程池中购啄,變得可運行,等待獲取CPU的使用權(quán)嘱么。
3狮含、運行狀態(tài)(Running):就緒狀態(tài)的線程獲取了CPU,執(zhí)行程序代碼曼振。
4几迄、阻塞狀態(tài)(Blocked):阻塞狀態(tài)是線程因為某種原因放棄CPU使用權(quán),暫時停止運行拴测。直到線程進入就緒狀態(tài)乓旗,才有機會轉(zhuǎn)到運行狀態(tài)。阻塞的情況分三種:
(一)集索、等待阻塞:運行的線程執(zhí)行wait()方法屿愚,JVM會把該線程放入等待池中。
(二)务荆、同步阻塞:運行的線程在獲取對象的同步鎖時妆距,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池中函匕。
(三)娱据、其他阻塞:運行的線程執(zhí)行sleep()或join()方法,或者發(fā)出了I/O請求時盅惜,JVM會把該線程置為阻塞狀態(tài)中剩。當sleep()狀態(tài)超時、join()等待線程終止或者超時抒寂、或者I/O處理完畢時结啼,線程重新轉(zhuǎn)入就緒狀態(tài)。
5屈芜、死亡狀態(tài)(Dead):線程執(zhí)行完了或者因異常退出了run()方法郊愧,該線程結(jié)束生命周期。


image.png

常用方法

1井佑、currentThread()返回當前代碼段正在被哪個線程調(diào)用
2属铁、isAlive()判斷當前線程是否處于活動狀態(tài)
3、sleep()方法在指定的毫秒數(shù)內(nèi)讓當前“正在執(zhí)行的線程”休眠(暫停執(zhí)行)
4躬翁、getId()獲取線程的唯一標識
5焦蘑、yield()放棄當前的cpu資源,讓給其他的任務(wù)占用cpu執(zhí)行

停止線程

java中有三種方法可以終止正在運行的線程:

  • 使用退出標志姆另,使線程正常退出喇肋,也就是當run方法完成后線程終止
  • 使用stop方法強行終止線程坟乾,但不推薦迹辐,stop會釋放鎖給數(shù)據(jù)造成不一致性的結(jié)果蝶防,stop和suspend以及resume一樣,都是過期的方法明吩,使用它們可能會產(chǎn)生不可預(yù)料的結(jié)果间学,
  • 使用interrupt方法中斷線程,但不會真的停止線程印荔,而是在當前線程打了一個停止的標記低葫。
    判斷線程是否中止:
    this.interrupted:測試當前狀態(tài)是否是中斷狀態(tài),執(zhí)行后具有將狀態(tài)標志清除為false的功能仍律。
    this.isInterrupted測試線程Thread對象是否已經(jīng)是中斷狀態(tài)嘿悬,但不清除狀態(tài)標志。

線程的優(yōu)先級

線程的優(yōu)先級分為1~10個等級水泉,線程的優(yōu)先級具有繼承性善涨,比如A線程啟動了B線程,則B線程的優(yōu)先級與A是一樣的草则。setPriority()可以用來設(shè)置線程的優(yōu)先級钢拧。優(yōu)先級具有

守護線程

java線程有兩種線程,一種是用戶線程炕横,另一種是守護線程源内。當進程轉(zhuǎn)中不存在非守護線程時,守護線程自動銷毀份殿,典型的就是GC(垃圾回收器)線程膜钓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卿嘲,隨后出現(xiàn)的幾起案子颂斜,更是在濱河造成了極大的恐慌,老刑警劉巖腔寡,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焚鲜,死亡現(xiàn)場離奇詭異,居然都是意外死亡放前,警方通過查閱死者的電腦和手機忿磅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凭语,“玉大人葱她,你說我怎么就攤上這事∷迫樱” “怎么了吨些?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵搓谆,是天一觀的道長。 經(jīng)常有香客問我豪墅,道長泉手,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任偶器,我火速辦了婚禮斩萌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屏轰。我一直安慰自己颊郎,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布霎苗。 她就那樣靜靜地躺著姆吭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唁盏。 梳的紋絲不亂的頭發(fā)上内狸,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音升敲,去河邊找鬼答倡。 笑死,一個胖子當著我的面吹牛驴党,可吹牛的內(nèi)容都是我干的瘪撇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼港庄,長吁一口氣:“原來是場噩夢啊……” “哼倔既!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹏氧,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤渤涌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后把还,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體实蓬,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年吊履,在試婚紗的時候發(fā)現(xiàn)自己被綠了安皱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡艇炎,死狀恐怖酌伊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缀踪,我是刑警寧澤居砖,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布虹脯,位于F島的核電站,受9級特大地震影響奏候,放射性物質(zhì)發(fā)生泄漏循集。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一鼻由、第九天 我趴在偏房一處隱蔽的房頂上張望暇榴。 院中可真熱鬧厚棵,春花似錦蕉世、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至彬犯,卻和暖如春向楼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谐区。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工湖蜕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宋列。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓昭抒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炼杖。 傳聞我的和親對象是個殘疾皇子灭返,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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

  • 前言 多線程并發(fā)編程是Java編程中重要的一塊內(nèi)容,也是面試重點覆蓋區(qū)域坤邪,所以學好多線程并發(fā)編程對我們來說極其重要...
    嘟爺MD閱讀 7,304評論 21 272
  • 寫在前面的話: 這篇博客是我從這里“轉(zhuǎn)載”的熙含,為什么轉(zhuǎn)載兩個字加“”呢?因為這絕不是簡單的復(fù)制粘貼艇纺,我花了五六個小...
    SmartSean閱讀 4,711評論 12 45
  • 一怎静、線程概念 1. 操作系統(tǒng)中的線程現(xiàn)在的操作系統(tǒng)是多任務(wù)操作系統(tǒng),多線程是實現(xiàn)多任務(wù)的一種方式黔衡,在操作系統(tǒng)中蚓聘,每...
    TyiMan閱讀 1,906評論 1 35
  • 進程: 進程是用于指一個正在運行的可執(zhí)行程序,它可以包含多個線程员帮,注意:一個沒有運行的程序不是一個進程或粮。 進程的特...
    字節(jié)碼閱讀 529評論 0 0
  • 一枚學妹最近遇上點煩心事。 有幾項關(guān)于互聯(lián)網(wǎng)的創(chuàng)業(yè)項目比賽捞高,學妹想?yún)⒓勇炔模也坏胶线m的團隊伙伴渣锦。班級有固定的...
    Amber喬閱讀 493評論 0 0