Java中的線程-1

支持多線程編程是Java語言不同與其他語言的優(yōu)點(diǎn)。

1 :什么是線程厌漂?

? ? 在回答這個(gè)問題之前萨醒,先要了解什么是進(jìn)程。

? ? 進(jìn)程是程序在數(shù)據(jù)集合上的一次執(zhí)行過程桩卵,是資源申請验靡,調(diào)度和獨(dú)立運(yùn)行的單位。(現(xiàn)在是不是有點(diǎn)暈雏节,沒事胜嗓,舉個(gè)列子就理解了)比如:在電腦中你可以同時(shí)打開QQ,播放器等等應(yīng)用程序钩乍。實(shí)際在操作系統(tǒng)中就是創(chuàng)建了對應(yīng)的進(jìn)程辞州。對于單CPU的計(jì)算機(jī)來講,同一時(shí)刻只有一個(gè)進(jìn)程在運(yùn)作寥粹,不是全部運(yùn)作变过,它們是通過短時(shí)間的交替來運(yùn)行。時(shí)間比較短涝涤,所以就感覺是一塊執(zhí)行媚狰。

線程是進(jìn)程的基本單位。是一個(gè)獨(dú)立執(zhí)行線索阔拳,一個(gè)進(jìn)程最少包含一個(gè)線程崭孤。進(jìn)程執(zhí)行時(shí),真正起作用的是線程糊肠。線程又稱為輕量級進(jìn)程辨宠,它和進(jìn)程一樣擁有獨(dú)立的執(zhí)行控制,不一樣的是線程沒有獨(dú)立的存儲(chǔ)空間货裹,和所屬進(jìn)程中其他線程公用一個(gè)存儲(chǔ)空間嗤形。

2 : 線程的概念模型

? ? a:虛擬的CPU(封裝在java.lang.Thread類)

? ? b:CPU所執(zhí)行的代碼

? ? c:CPU所需要的變量

3:線程的創(chuàng)建

? ? 有兩種方式

? ? a:繼承Thread類。

? ? b:實(shí)現(xiàn)Runnable接口弧圆。

4 :Thread類中的主要方法

public Thread()——構(gòu)造方法赋兵,創(chuàng)建一個(gè)Thread對象,名字默認(rèn)為Thread-n搔预,根據(jù)創(chuàng)建的先后順序毡惜。n從0開始。

public Thread(String name)——構(gòu)造方法斯撮,創(chuàng)建一個(gè)名字為name的Thread對象

public Thread(Runnable target)——構(gòu)造方法经伙,創(chuàng)建一個(gè)新的實(shí)現(xiàn)Runnable接口的線程類,

public Thread(Runnable target ,String name)——構(gòu)造方法勿锅,創(chuàng)建一個(gè)新的實(shí)現(xiàn)了Runnable接口的線程類帕膜,同時(shí)設(shè)置名字為name

public long getId()——返回該線程的唯一ID

public void run()——線程體,此線程所有的代碼都在其中寫溢十。此方法不能被顯性調(diào)用垮刹,只能由JVM調(diào)用,調(diào)用線程的start()方法時(shí)张弛,JVM會(huì)調(diào)用run()方法荒典。

public void start()——調(diào)用此方法酪劫,JVM會(huì)調(diào)用run() 方法。

public void join()——當(dāng)前線程執(zhí)行某一線程的此方法寺董,當(dāng)前線程等到該線程執(zhí)行完后才能執(zhí)行

public static void slep(long mills)——線程休眠覆糟,休眠時(shí)間為mills,休眠時(shí)不釋放所占有的資源.

public static void yield()——暫停當(dāng)前正在執(zhí)行的線程對象遮咖,并執(zhí)行其他線程滩字。該線程直接進(jìn)入就緒狀態(tài)。

這是主要的幾個(gè)御吞,還有好多的方法參考javaAPI

這個(gè)例子是繼承Thread


這個(gè)例子是實(shí)現(xiàn)Runnable接口

(實(shí)現(xiàn)Runnable接口的類麦箍,稱為線程類,這個(gè)類是不能作為線程啟動(dòng)的陶珠,必須通過Thrad構(gòu)造方法進(jìn)行“深加工”后在可以挟裂。這個(gè)方法可以創(chuàng)造多個(gè)線程對象,但執(zhí)行的線程體都是一樣的揍诽。)



5 : 線程的狀態(tài)

? ? 三個(gè)階段

? ? a:新建(New)new 出一個(gè)新對象

? ? b: ? 就緒 (Runnable) ?新建狀態(tài)的對象調(diào)用start()方法话瞧,對象進(jìn)入就緒狀態(tài)。

? ? c:運(yùn)行 (Running) ?就緒狀態(tài)的對象寝姿,獲得CPU分配的時(shí)間片進(jìn)入運(yùn)行狀態(tài),處于運(yùn)行狀態(tài)的對象交排,可以通過不同的方式進(jìn)入不同的狀態(tài)。

? ? d: ? 阻塞 (Blocked)饵筑。阻塞分為三個(gè)狀態(tài) wait等待池阻塞(Blocked in object wait pool) lock等待池阻塞(Blocked in lock pool)和其他阻塞(Otherwise Blocked)

? ? e:死亡 (Dead)

狀態(tài)轉(zhuǎn)移具體如下????

? ? 1.處于運(yùn)行狀態(tài)的線程對象的run()或著main()方法結(jié)束后埃篓,線程就進(jìn)入死亡(程序運(yùn)行完成而運(yùn)行終止)狀態(tài)

? ? 2.處于運(yùn)行狀態(tài)的線程對象,當(dāng)線程對象調(diào)用了自身的sleep()方法或者其他的線程的jion()方法根资,或者發(fā)出I/O請求架专,就會(huì)進(jìn)入阻塞狀態(tài)(該狀態(tài)即停止當(dāng)前線程,但并不會(huì)釋放自己擁有的資源)當(dāng)sleep()結(jié)束或者jion()結(jié)束或者I/O操作結(jié)束后 或者 調(diào)用線程的interupt方法玄帕,該線程進(jìn)入就緒狀態(tài)部脚,繼續(xù)等待OS分配時(shí)間塊。

? ? 3.處于運(yùn)行狀態(tài)的線程對象裤纹,當(dāng)線程調(diào)用yield()方法委刘,放棄當(dāng)前獲得的CPU時(shí)間片,或者時(shí)間片用完線程還沒結(jié)束鹰椒,線程對象回到就緒狀態(tài)锡移,這時(shí)與其他進(jìn)程處于同一起跑線,OS可能會(huì)繼續(xù)讓他進(jìn)入運(yùn)行狀態(tài)漆际。

?4.當(dāng)線程對象剛進(jìn)入運(yùn)行狀態(tài)淆珊,但還沒運(yùn)行,發(fā)現(xiàn)線程運(yùn)行需要的資源被(synchronized)同步奸汇,并獲取不到鎖標(biāo)記施符,將會(huì)立即進(jìn)入阻塞(鎖等待池)狀態(tài)往声,登臺獲取鎖標(biāo)記,一旦線程獲得標(biāo)記戳吝,就進(jìn)入就緒狀態(tài)浩销,等待OS分配CPU時(shí)間片。

5.處于運(yùn)行狀態(tài)的線程對象骨坑,當(dāng)線程調(diào)用wait()方法后撼嗓,會(huì)進(jìn)入阻塞(等待隊(duì)列)狀態(tài)柬采,釋放它所占有的資源欢唾,這個(gè)狀態(tài)不能主動(dòng)喚醒,必須依靠其他線程調(diào)用notify()或者notifyAll()方法粉捻,才能被喚醒礁遣。由于notify只能喚醒一個(gè)線程,但不能確定具體喚醒的是哪一個(gè)線程肩刃,一般調(diào)用notifyAll()方法祟霍,線程喚醒后進(jìn)入鎖池,等待獲取鎖標(biāo)記盈包。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沸呐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呢燥,更是在濱河造成了極大的恐慌崭添,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叛氨,死亡現(xiàn)場離奇詭異呼渣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寞埠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門屁置,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仁连,你說我怎么就攤上這事蓝角。” “怎么了饭冬?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵帅容,是天一觀的道長。 經(jīng)常有香客問我伍伤,道長并徘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任扰魂,我火速辦了婚禮麦乞,結(jié)果婚禮上蕴茴,老公的妹妹穿的比我還像新娘。我一直安慰自己姐直,他們只是感情好倦淀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著声畏,像睡著了一般撞叽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上插龄,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天愿棋,我揣著相機(jī)與錄音,去河邊找鬼均牢。 笑死糠雨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的徘跪。 我是一名探鬼主播甘邀,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垮庐!你這毒婦竟也來了松邪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哨查,失蹤者是張志新(化名)和其女友劉穎逗抑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體解恰,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锋八,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了护盈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挟纱。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腐宋,靈堂內(nèi)的尸體忽然破棺而出紊服,到底是詐尸還是另有隱情,我是刑警寧澤胸竞,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布欺嗤,位于F島的核電站,受9級特大地震影響卫枝,放射性物質(zhì)發(fā)生泄漏煎饼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一校赤、第九天 我趴在偏房一處隱蔽的房頂上張望吆玖。 院中可真熱鬧筒溃,春花似錦、人聲如沸沾乘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翅阵。三九已至歪玲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掷匠,已是汗流浹背滥崩。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留槐雾,地道東北人夭委。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓幅狮,卻偏偏與公主長得像募强,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子崇摄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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

  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類 二實(shí)現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,957評論 1 18
  • 本文主要講了java中多線程的使用方法擎值、線程同步、線程數(shù)據(jù)傳遞逐抑、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法鸠儿、概述等。 首先講...
    李欣陽閱讀 2,454評論 1 15
  • 進(jìn)程和線程 進(jìn)程 所有運(yùn)行中的任務(wù)通常對應(yīng)一個(gè)進(jìn)程,當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行時(shí),即變成一個(gè)進(jìn)程.進(jìn)程是處于運(yùn)行過程中...
    小徐andorid閱讀 2,808評論 3 53
  • 如果一定要有不盡人意的一些經(jīng)歷厕氨,早些遇到就是幸運(yùn)本身进每,這樣會(huì)比別人更早的明白自己想要怎樣走自己的路,走起來會(huì)少些遲...
    亞昭閱讀 531評論 0 0
  • 我喜歡你汇四,就像洛枳喜歡盛淮南接奈,誰也不知道。 我的眼里通孽,滿滿都是你序宦,像風(fēng)行了八千里,依然只有對你的身影的眷戀背苦。 ...
    盈瑯閱讀 624評論 4 4