深入理解java線程

線程

我們知道線程是比進程更加輕量級的調(diào)度執(zhí)行單位,線程的引入可以把一個進程的資源分配和執(zhí)行調(diào)度分開,各個線程之間共享進程資源,又可以獨立調(diào)度.

java線程的實現(xiàn)

主流的操作系統(tǒng)都提供了線程的實現(xiàn),java則提供了在不同硬件和操作系統(tǒng)下對線程的一致性操作,在java中每個執(zhí)行了start()方法并且還沒有結束的java.lang.Thread類的實例都代表了一個線程.

java線程在jdk1.2之前,是基于成為綠色線程的用戶線程實現(xiàn)的,而在jdk1.2中,java的線程模型替換為基于操作系統(tǒng)原生線程模型來實現(xiàn).

對于sun jdk來說,它的linux版本與windows版本都是使用一對一的線程模型實現(xiàn)的,一條java線程映射一個輕量級進程.

(對于線程的實現(xiàn)可參考線程的實現(xiàn))

java線程的調(diào)度

線程的調(diào)度是指系統(tǒng)為線程分配處理器使用權的過程,主要的調(diào)度方式有兩種,一種是協(xié)同式,一種是搶占式.

協(xié)同式線程調(diào)度(Cooperative Threads Scheduling):

如果使用協(xié)同式調(diào)度的多線程系統(tǒng),線程的執(zhí)行時間由線程本身來控制,線程把自己的工作執(zhí)行完了之后,要主動通知系統(tǒng)切換到另外個線程上。 協(xié)同式多線程的最大好處是實現(xiàn)簡單岩喷,而且由于線程要把自己的事情干完后才會進行線程切換,切換操作對線程自己是可知的监憎,所以沒有什么線程同步的問題纱意。但是使用協(xié)同式來實現(xiàn)多進程多任務,相當不穩(wěn)定枫虏,一個進程堅持不讓出CPU執(zhí)行時間就可能會導致整個系統(tǒng)崩潰妇穴。

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

如果使用搶占式調(diào)度的多線程系統(tǒng)爬虱,那么每個線程將由系統(tǒng)來分配執(zhí)行時間,線程的切換不由線程本身來決定(在Java中腾它,Thread.yield()可以讓出執(zhí)行時間跑筝,但是要獲取執(zhí)行時間的話,線程本身是沒有什么辦法的)瞒滴。在這種實現(xiàn)線程調(diào)度的方式下曲梗,線程的執(zhí)行時間是系統(tǒng)可控的,也不會有一個線程導致整個進程阻塞的問題妓忍,Java 使用的線程調(diào)度方式就是搶占式調(diào)度虏两。

java線程狀態(tài)轉換

Java定義了5種線程狀態(tài),在任意一個時間點世剖,一個線程只能有且只有其中的一種狀態(tài)定罢,這5種狀態(tài)分別如下。

新建(New):創(chuàng)建后尚未啟動的線程處于這種狀態(tài)旁瘫。

運行(Runable): Runable 包括了操作系統(tǒng)線程狀態(tài)中的Running和Ready,也就是處于此狀態(tài)的線程有可能正在執(zhí)行祖凫,也有可能正在等待著CPU為它分配執(zhí)行時間。

無限期等待(Waiting): 處于這種狀態(tài)的線程不會被分配CPU執(zhí)行時間酬凳,它們要等待被其他線程顯式地喚醒.

以下方法會讓線程陷人無限期的等待狀態(tài):

1.沒有設置Timcout參數(shù)的Object.wait()方法

2.沒有設置Timcout參數(shù)的Thread.join()方法惠况。

3.LockSupport.park()方法。

限期等待(Timed Waiting):處于這種狀態(tài)的線程也不會被分配CPU執(zhí)行時間宁仔,不過無須等待被其他線程顯式地喚醒稠屠,在一定時間之后它們會由系統(tǒng)自動喚醒。

以下方法會讓線程進人限期等待狀態(tài):

1.Thread.sleep() 方法.

2.設置了Timeout參數(shù)的Object.wait()方法.

3.設置了Timeout參數(shù)的Threadjoin(方法.

4.LockSupport.parkNanos() 方法.

5.LockSupport.parkUntil()方法.

阻塞(Blocked):線程被阻塞了翎苫,“阻塞狀態(tài)”與“等待狀態(tài)”的區(qū)別是:“阻塞狀態(tài)”在等待著獲取到一個排他鎖权埠,這個事件將在另外一個線程放棄這個鎖的時候發(fā)生,而等待狀態(tài)則是在等待一段段時間,或者喚醒動作的發(fā)生拉队。在程序等待進人同步區(qū)域的時候弊知,線程將進人這種狀態(tài)。

結束(Terminated): 已終止線程的線程狀態(tài)粱快,線程已經(jīng)結束執(zhí)行秩彤。上述5種狀態(tài)在遇到特定事件發(fā)生的時候?qū)ハ噢D換,它們的轉換關系如圖所示事哭。


?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漫雷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鳍咱,更是在濱河造成了極大的恐慌降盹,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谤辜,死亡現(xiàn)場離奇詭異蓄坏,居然都是意外死亡价捧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門涡戳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來结蟋,“玉大人,你說我怎么就攤上這事渔彰∏妒海” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵恍涂,是天一觀的道長宝惰。 經(jīng)常有香客問我,道長再沧,這世上最難降的妖魔是什么尼夺? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮产园,結果婚禮上汞斧,老公的妹妹穿的比我還像新娘。我一直安慰自己什燕,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布竞端。 她就那樣靜靜地躺著屎即,像睡著了一般。 火紅的嫁衣襯著肌膚如雪事富。 梳的紋絲不亂的頭發(fā)上技俐,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音统台,去河邊找鬼雕擂。 笑死,一個胖子當著我的面吹牛贱勃,可吹牛的內(nèi)容都是我干的井赌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼贵扰,長吁一口氣:“原來是場噩夢啊……” “哼仇穗!你這毒婦竟也來了?” 一聲冷哼從身側響起戚绕,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤纹坐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舞丛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耘子,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡果漾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谷誓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绒障。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖片林,靈堂內(nèi)的尸體忽然破棺而出端盆,到底是詐尸還是另有隱情,我是刑警寧澤费封,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布焕妙,位于F島的核電站,受9級特大地震影響弓摘,放射性物質(zhì)發(fā)生泄漏焚鹊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一韧献、第九天 我趴在偏房一處隱蔽的房頂上張望末患。 院中可真熱鬧,春花似錦锤窑、人聲如沸璧针。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽探橱。三九已至,卻和暖如春绘证,著一層夾襖步出監(jiān)牢的瞬間隧膏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工嚷那, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胞枕,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓魏宽,卻偏偏與公主長得像腐泻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子湖员,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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