成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

neuSnail / 2193人閱讀

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

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

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

關(guān)于線程的理解,我們將一個線程看成是一個任務(wù)task,這樣應(yīng)該更好理解。

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

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

無限等待

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

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

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

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

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

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

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

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

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

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

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

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

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

調(diào)用Thread.join(timeout) 方法。

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

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

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

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

圖示:

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/71692.html

相關(guān)文章

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

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

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

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

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

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

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

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

    ivyzhang 評論0 收藏0
  • 詳細(xì)分析Java斷機(jī)制

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

    bergwhite 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<