Java線程基礎(chǔ)

創(chuàng)建線程的多種方式

  • 繼承thread類
  • 實現(xiàn)Runnable接口
  • 實現(xiàn)callable接口
  • 使用executor框架實現(xiàn)線程池

線程的狀態(tài)

  • 新建狀態(tài)

當一個Thread類或者其子類的對象被聲明或者是創(chuàng)建奕翔,但沒有執(zhí)行的這段狀態(tài)稱為新建狀態(tài)派继。

  • 就緒狀態(tài)

就緒狀態(tài)也稱為可運行狀態(tài)互艾。處于新建狀態(tài)的線程被啟動后讯泣,將進入線程列隊排隊等候cpu的調(diào)度,此時具備了運行的條件昨稼,也就是就緒狀態(tài)拳锚。

  • 運行狀態(tài)

就緒狀態(tài)的線程獲得cpu的調(diào)度并獲得系統(tǒng)資源后便進入了運行狀態(tài)霍掺。
處于運行狀態(tài)的線程在一下情況下將讓出cpu的控制權(quán)
●線程運行完畢。
●有比當前優(yōu)先級更高的線程處于就緒狀態(tài)牙丽。
●線程主動睡眠一段時間兔魂。
●線程正在等待某一資源。

  • 阻塞狀態(tài)

一個運行的線程在某些特殊的情況下將讓出cpu构罗,并暫時中止自己的執(zhí)行遂唧。線程處于這種不可運行的狀態(tài)稱為阻塞狀態(tài)吊奢。下面幾種情況下可以使一個線程進入阻塞狀態(tài)。
●調(diào)用sleep()或者yield()方法谬泌。
●等待一個條件變量線程調(diào)用wait()方法逻谦。
●該線程與另一個線程join()在一起。
一個線程被阻塞時不能進入排隊隊列贱鼻,阻塞的原因被消除時才能進入就緒狀態(tài)邻悬。阻塞狀態(tài)的線程通常需要某些事件才能喚醒随闽,睡眠狀態(tài)的線程必須阻塞一段固定時間。

  • 消亡狀態(tài)

處于消亡狀態(tài)的線程不具備繼續(xù)執(zhí)行的能力蛾扇,導(dǎo)致線程消亡的原因有兩個:一是執(zhí)行了run()方法的最后一條語句魏滚,二是進程中的線程被強制終止。

線程的調(diào)度與優(yōu)先級:java語言支持搶占調(diào)度模型更哄,每個線程都被賦予一個執(zhí)行的優(yōu)先級成翩。從1到10整數(shù)型花颗。Thread類有三個優(yōu)先級的靜態(tài)變量MIN_PRIORITY(1),MAX_PRIORITY(10),NORM_PRIORITY(5)。

User Thread(用戶線程) vs Daemon Thread(守護線程)

java中有兩類線程庸论,分別是用戶線程和守護線程只要當前JVM實例中尚存在任何一個非守護線程沒有結(jié)束棒呛,守護線程就全部工作;只有當最后一個非守護線程結(jié)束時鱼喉,守護線程隨著JVM一同結(jié)束工作扛禽。
守護線程的存在主要是為其他線程提供服務(wù),GC(垃圾回收)線程就是一個典例的守護線程豆巨。

用法上兩者并沒有什么區(qū)別掐场,唯一區(qū)別是jvm結(jié)束時的區(qū)別:jvm要等所有用戶線程結(jié)束掉后才會離開,而不用等待守護線程萍膛,守護線程隨著jvm的結(jié)束而結(jié)束(當然守護線程任務(wù)完成后也會結(jié)束)

使用場景

  • 消息推送線程
  • 資源監(jiān)控等

使用方法

Thread daemonTread = new Thread();  
daemonThread.setDaemon(true);  
daemonThread.start();

User Thread 和 Daemon Thread 使用注意點

  • 守護線程要在start()方法調(diào)用之前調(diào)用setDaemon(true)來把線程設(shè)置為守護線程蝗罗,否者會拋出IllegalThreadStateException異常麦到。
  • 守護線程新建的線程默認也是守護線程,當然用戶線程新建的線程默認也是用戶線程拟赊。(主要參考Thread的init方法)
  • 用戶線程線程可以創(chuàng)建守護線程粹淋,當然守護線程也可以創(chuàng)建用戶線程桃移。
  • 不要把業(yè)務(wù)類的或計算類等重要流程放到守護線程中去,因為在jvm計算時若計算未完成則也會結(jié)束掉守護線程过吻。
  • 不要隨便使用用戶線程蔗衡。如在Web容器啟動時啟動Timer,當Web容器關(guān)閉時逼纸,除非你手工關(guān)閉這個Timer济蝉,否則Timer中的任務(wù)還會繼續(xù)運行菠发!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滓鸠,一起剝皮案震驚了整個濱河市哥力,隨后出現(xiàn)的幾起案子墩弯,更是在濱河造成了極大的恐慌寞射,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件引矩,死亡現(xiàn)場離奇詭異旺韭,居然都是意外死亡掏觉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門织盼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沥邻,“玉大人,你說我怎么就攤上這事唐全∪镧瑁” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵集畅,是天一觀的道長。 經(jīng)常有香客問我挺智,道長窗宦,這世上最難降的妖魔是什么二鳄? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任订讼,我火速辦了婚禮,結(jié)果婚禮上寄纵,老公的妹妹穿的比我還像新娘脖苏。我一直安慰自己,他們只是感情好棍潘,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布亦歉。 她就那樣靜靜地躺著,像睡著了一般水由。 火紅的嫁衣襯著肌膚如雪阶祭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天鞭盟,我揣著相機與錄音齿诉,去河邊找鬼晌姚。 笑死,一個胖子當著我的面吹牛挥唠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弧关,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼别瞭!你這毒婦竟也來了株憾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤墙歪,失蹤者是張志新(化名)和其女友劉穎猫胁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡菠赚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年衡查,在試婚紗的時候發(fā)現(xiàn)自己被綠了必盖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡歌粥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出土居,到底是詐尸還是另有隱情嬉探,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布眷蜓,位于F島的核電站胎围,受9級特大地震影響德召,放射性物質(zhì)發(fā)生泄漏垮抗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一液茎、第九天 我趴在偏房一處隱蔽的房頂上張望捆等。 院中可真熱鬧续室,春花似錦、人聲如沸挺狰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至学赛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間变丧,已是汗流浹背缠捌。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工曼月, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哑芹。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓碴萧,卻偏偏與公主長得像乙嘀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚁鳖,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

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

  • 單任務(wù) 單任務(wù)的特點是排隊執(zhí)行,也就是同步几莽,就像再cmd輸入一條命令后,必須等待這條命令執(zhí)行完才可以執(zhí)行下一條命令...
    Steven1997閱讀 1,182評論 0 6
  • 線程的狀態(tài) 新建狀態(tài):用new語句創(chuàng)建的線程對象處于新建狀態(tài),此時它和其它的java對象一樣姨夹,僅僅在堆中被分配了內(nèi)...
    稻田上的稻草人閱讀 565評論 0 1
  • Java多線程學(xué)習(xí) [-] 一擴展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,965評論 1 18
  • 何時需要多線程洒忧? 程序需要同時執(zhí)行兩個或多個任務(wù)够颠。程序?qū)崿F(xiàn)一些需要等待的任務(wù)時履磨,如用戶輸入庆尘、文件讀寫操作剃诅、網(wǎng)絡(luò)操作...
    zheting閱讀 236評論 0 1
  • 不算費力的讀完了《小島經(jīng)濟學(xué)》矛辕,當那些抽象的付魔、模糊不清的經(jīng)濟學(xué)概念聊品、名詞和現(xiàn)象變成了故事之后翻屈,一切都變得簡單易懂妻坝。...
    鈴蘭小語閱讀 290評論 0 0