成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java中線程的5種狀態(tài)

neuSnail / 2155人閱讀

摘要:線程的狀態(tài)參考資料參考虛擬機一書的內(nèi)容,進行總結。一線程的種狀態(tài)新建使用創(chuàng)建一個線程之后。啟動一個線程,該線程會進入等待隊列等待的執(zhí)行,因此可以細分為和狀態(tài)。結束當線程的方法執(zhí)行結束后,該線程就結束了。

線程的狀態(tài)
參考資料:https://www.cnblogs.com/happy...

參考JVM虛擬機一書的內(nèi)容,進行總結。

關于線程的理解,我們將一個線程看成是一個任務task,這樣應該更好理解。

每一個線程就是一個任務,我們要執(zhí)行一個任務,這個任務如果完成了,那么我們的程序功能就得到了實現(xiàn)。

因為只有一個CPU,也就是說只有一個干活的人。那么我們開始了那么多的任務,CPU就需要頻繁地切換任務來執(zhí)行,這樣我們就能更好地理解任務的一些狀態(tài)了。

無限等待

對于無線等待的任務,第一種情況。

假設有任務A和任務B,我們在任務B的執(zhí)行代碼中:A.join(); ,這表示把任務B放在任務A的后面執(zhí)行,那么任務B只有等待任務A做完之后才可以繼續(xù)執(zhí)行(準確地說是進入運行狀態(tài))。也就是說我們無法確定任務B等待的時間,這取決于任務A,所以這叫做無限等待。

對于無限等待的任務,第二種情況。

假設有任務C和任務D,我們在任務C的執(zhí)行代碼中:Object.wait() ,這表示把任務C擱置,讓它無限等待下去。任務C什么時候可以繼續(xù)執(zhí)行呢?只有當其他任務調用了notify()notifyAll() 方法之后,這表示CPU將去看看那些無限等待的任務(特指使用了wait() 方法而等待的任務),然后把它們喚醒(這些任務又進入了運行狀態(tài))。這種情況下,我們無法確定任務C等待的時間,這取決于notify()notifyAll() 方法的通知,這就是無限等待的第二種情況。

一、線程的5種狀態(tài)

新建(New) :使用new Thread() 創(chuàng)建一個線程之后。

運行(Runnable) :使用Thread.start() 方法之后。啟動一個線程,該線程會進入等待隊列等待CPU的執(zhí)行,因此可以細分為runnable和running狀態(tài)。

無限等待(waiting) :處于這種狀態(tài)的線程,不會被分配CPU執(zhí)行時間,需要等待其他線程顯式地喚醒,然后進入運行狀態(tài)。

調用Thread.join() 方法。將會一直等待上一個線程的執(zhí)行結束,然后被上一個線程喚醒。

調用Object.wait() 方法。將會一直等待,直到其他線程中使用了notify()、notifyAll()進行喚醒。

有限等待(timed waiting) :處于這種狀態(tài)的線程,不會被分配CPU執(zhí)行時間,既可以被其他線程顯式地喚醒,也可以在一定時間后由系統(tǒng)自動喚醒,然后進入運行狀態(tài)。

調用Thread.sleep(timeout) 方法。該方法不會釋放持有的對象鎖。

調用Object.wait(timeout) 方法。該方法會釋放持有的鎖。

調用Thread.join(timeout) 方法。

阻塞(blocked) :阻塞和等待的區(qū)別在于,阻塞是在等待獲取一個排它鎖,因為該線程獲取不到鎖所以被阻塞住而不能允許;而等待則是等待一段時間或者是等待被喚醒,等待狀態(tài)并不是等待獲取鎖。這個狀態(tài)有個特點,一個線程請求鎖,得到之后該線程進入阻塞狀態(tài);而其他線程再來請求鎖,由于得不到而阻塞;當該鎖釋放后,被阻塞的線程得到鎖就進入了運行狀態(tài)。

synchronized 修飾的代碼塊、方法。使得線程之間有并行變成串行執(zhí)行。

IO操作,也是串行執(zhí)行。

結束(terminated) :當線程的run() 方法執(zhí)行結束后,該線程就結束了。

圖示:

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/71692.html

相關文章

  • [Java并發(fā)-7]java線程小節(jié)

    摘要:在領域,實現(xiàn)并發(fā)程序的主要手段就是多線程??蛇\行狀態(tài)指的是線程可以分配執(zhí)行。當?shù)却氖录霈F(xiàn)了,線程就會從休眠狀態(tài)轉換到可運行狀態(tài)。導出線程棧,分析線程狀態(tài)是診斷并發(fā)問題的一個重要工具。 在 Java 領域,實現(xiàn)并發(fā)程序的主要手段就是多線程。線程是操作系統(tǒng)里的一個概念,雖然各種不同的開發(fā)語言如 Java、C# 等都對其進行了封裝,但原理和思路都是相同都。Java 語言里的線程本質上就是...

    Sunxb 評論0 收藏0
  • java并發(fā)編程學習1--基礎知識

    摘要:死亡狀態(tài)線程退出有可能是正常執(zhí)行完成也有可能遇見異常退出。類有新建與死亡狀態(tài)返回其余狀態(tài)返回判斷線程是否存活。線程因某些原因進入阻塞狀態(tài)。執(zhí)行同步代碼塊的過程中執(zhí)行了當前線程放棄開始睡眠進入就緒狀態(tài)但是不會釋放鎖。 【java內(nèi)存模型簡介 JVM中存在一個主存區(qū)(Main Memory或Java Heap Memory),Java中所有變量都是存在主存中的,對于所有線程進行共享,而每個...

    huangjinnan 評論0 收藏0
  • 慕課網(wǎng)_《細說多線程之Thread VS Runnable》學習總結

    摘要:時間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學源碼無學習源碼第一章課前準備前言課程說明比較和這兩種線程創(chuàng)建的方式,需要知道和的基本創(chuàng)建方式。一旦主線程獲取到了用戶的輸入,這時候,阻塞就會解除掉,主線程繼續(xù)運行,直到結束。 時間:2017年07月08日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:無學習源碼:https://g...

    netScorpion 評論0 收藏0
  • Java線程生命周期

    摘要:線程的生命周期線程的生命周期大致可以分為下面五種狀態(tài)新建狀態(tài)就緒狀態(tài)運行狀態(tài)休眠狀態(tài)終止狀態(tài)新建狀態(tài),是線程被創(chuàng)建且未啟動的狀態(tài)這里的創(chuàng)建,僅僅是在的這種編程語言層面被創(chuàng)建,而在操作系統(tǒng)層面,真正的線程還沒有被創(chuàng)建。 概要 目前CPU的運算速度已經(jīng)達到了百億次每秒,甚至更高的量級,家用電腦即使維持操作系統(tǒng)正常運行的進程也會有數(shù)十個,線程更是數(shù)以百計。 線程是CPU的調度和分派的基本單位...

    ivyzhang 評論0 收藏0
  • 詳細分析Java斷機制

    摘要:沒有提供一種安全直接的方法來停止某個線程,但是提供了中斷機制。中斷的原理中斷機制是一種協(xié)作機制,也就是說通過中斷并不能直接終止另一個線程,而需要被中斷的線程自己處理中斷。線程的中斷狀態(tài)由該方法清除。測試線程是否已經(jīng)中斷。 1. 引言 當我們點擊某個殺毒軟件的取消按鈕來停止查殺病毒時,當我們在控制臺敲入quit命令以結束某個后臺服務時……都需要通過一個線程去取消另一個線程正在執(zhí)行的任務...

    bergwhite 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<