国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

線程的狀態(tài)

zhou_you / 2080人閱讀

摘要:運(yùn)行中,線程狀態(tài)中并沒有這一狀態(tài),但是實(shí)際執(zhí)行中是有的可運(yùn)行狀態(tài)的線程獲得了時間片,執(zhí)行程序代碼。其他阻塞運(yùn)行的線程發(fā)出了請求時,會把該線程置為阻塞狀態(tài)。當(dāng)處理完畢時,線程重新轉(zhuǎn)入可運(yùn)行狀態(tài)。

Thread.State

首先看JDK中的代碼: java.lang.Thread.State

    /**
     * A thread state.  A thread can be in one of the following states:
     * 一個線程的狀態(tài),一個線程可以處于以下狀態(tài)中的某一個狀態(tài)
     * 
    *
  • {@link #NEW}
    * A thread that has not yet started is in this state. *
  • *
  • {@link #RUNNABLE}
    * A thread executing in the Java virtual machine is in this state. *
  • *
  • {@link #BLOCKED}
    * A thread that is blocked waiting for a monitor lock * is in this state. *
  • *
  • {@link #WAITING}
    * A thread that is waiting indefinitely for another thread to * perform a particular action is in this state. *
  • *
  • {@link #TIMED_WAITING}
    * A thread that is waiting for another thread to perform an action * for up to a specified waiting time is in this state. *
  • *
  • {@link #TERMINATED}
    * A thread that has exited is in this state. *
  • *
* *

* A thread can be in only one state at a given point in time. * These states are virtual machine states which do not reflect * any operating system thread states. * * @since 1.5 * @see #getState */ public enum State { /** * Thread state for a thread which has not yet started. */ NEW, ? /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * such as processor. */ RUNNABLE, ? /** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked state is waiting for a monitor lock * to enter a synchronized block/method or * reenter a synchronized block/method after calling * {@link Object#wait() Object.wait}. */ BLOCKED, ? /** * Thread state for a waiting thread. * A thread is in the waiting state due to calling one of the * following methods: *

    *
  • {@link Object#wait() Object.wait} with no timeout
  • *
  • {@link #join() Thread.join} with no timeout
  • *
  • {@link LockSupport#park() LockSupport.park}
  • *
* *

A thread in the waiting state is waiting for another thread to * perform a particular action. * * For example, a thread that has called Object.wait() * on an object is waiting for another thread to call * Object.notify() or Object.notifyAll() on * that object. A thread that has called Thread.join() * is waiting for a specified thread to terminate. */ WAITING, ? /** * Thread state for a waiting thread with a specified waiting time. * A thread is in the timed waiting state due to calling one of * the following methods with a specified positive waiting time: *

    *
  • {@link #sleep Thread.sleep}
  • *
  • {@link Object#wait(long) Object.wait} with timeout
  • *
  • {@link #join(long) Thread.join} with timeout
  • *
  • {@link LockSupport#parkNanos LockSupport.parkNanos}
  • *
  • {@link LockSupport#parkUntil LockSupport.parkUntil}
  • *
*/ TIMED_WAITING, ? /** * Thread state for a terminated thread. * The thread has completed execution. */ TERMINATED; }
1、新建(New)

新創(chuàng)建了一個線程對象,還未調(diào)用start()方法。

2、就緒(Runnable)

線程對象創(chuàng)建后,其他線程(比如main線程)調(diào)用了該對象的start()方法。該狀態(tài)的線程位于可運(yùn)行線程池中,等待被線程調(diào)度選中 獲取cpu 的使用權(quán) 。

3、運(yùn)行中(Running,線程狀態(tài)中并沒有這一狀態(tài),但是實(shí)際執(zhí)行中是有的)

可運(yùn)行狀態(tài)(runnable)的線程獲得了cpu 時間片(timeslice) ,執(zhí)行程序代碼。

4、限期等待(Timed Waiting)

也可以稱作 TIMED_WAITING(有等待時間的等待狀態(tài))。

線程主動調(diào)用以下方法:

Thread.sleep方法;

Object的wait方法,帶有時間;

Thread.join方法,帶有時間;

LockSupport的parkNanos方法,帶有時間。

5、無限期等待(Waiting)

運(yùn)行中(Running)的線程執(zhí)行了以下方法:

Object的wait方法,并且沒有使用timeout參數(shù);

Thread的join方法,沒有使用timeout參數(shù);

LockSupport的park方法;

Conditon的await方法。

6、阻塞(Blocked)

阻塞狀態(tài)是指線程因為某種原因放棄了cpu 使用權(quán),暫時停止運(yùn)行。直到線程進(jìn)入可運(yùn)行(runnable)狀態(tài),才有機(jī)會再次獲得cpu timeslice 轉(zhuǎn)到運(yùn)行(running)狀態(tài)。阻塞的情況分兩種:

同步阻塞:運(yùn)行(running)的線程進(jìn)入了一個synchronized方法,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池(lock pool)中。

其他阻塞:運(yùn)行(running)的線程發(fā)出了I/O請求時,JVM會把該線程置為阻塞狀態(tài)。當(dāng)I/O處理完畢時,線程重新轉(zhuǎn)入可運(yùn)行(runnable)狀態(tài)。

7、結(jié)束(Terminated)

線程run()、main() 方法執(zhí)行結(jié)束,或者因異常退出了run()方法,則該線程結(jié)束生命周期。

線程狀態(tài)探秘

jstack查看線程狀態(tài)
jstack -l 即可察看線程狀態(tài),如何使用呢?

隨便寫一個死循環(huán)看一下

public class TestThreadState {
    public static void main(String[] args) {
        for (; ; ) {
?
        }
    }
}

ps -ef|grep TestThreadState,找到對應(yīng)的pid,jstack -l 即可,如果未輸出線程信息,可以嘗試使用-F參數(shù)來強(qiáng)制輸出。

"main" #1 prio=5 os_prio=31 tid=0x00007f8194801800 nid=0x1603 runnable [0x000070000a9b4000]
   java.lang.Thread.State: RUNNABLE
        at org.java.bin.TestThreadState.main(TestThreadState.java:12)

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73905.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
  • 關(guān)于java多線程

    摘要:線程,有時被稱為輕量級進(jìn)程,,是程序執(zhí)行流的最小單元。由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)出間斷性。在單個程序中同時運(yùn)行多個線程完成不同的工作,稱為多線程。當(dāng)狀態(tài)超時等待線程終止或者超時或者處理完畢時,線程重新轉(zhuǎn)入就緒狀態(tài)。 java多線程,先要知道什么是線程(Threads),為什么要使用多線程。 線程,有時被稱為輕量級進(jìn)程(Lightweight Process,LWP),...

    sherlock221 評論0 收藏0
  • 深入淺出Java多線程

    摘要:當(dāng)狀態(tài)超時等待線程終止或者超時或者處理完畢時,線程重新轉(zhuǎn)入就緒狀態(tài)。死亡狀態(tài)線程執(zhí)行完了或者因異常退出了方法,該線程結(jié)束生命周期。線程加入方法,等待其他線程終止。一系列線程以某種順序啟動并不意味著將按該順序執(zhí)行。 初遇 Java給多線程編程提供了內(nèi)置的支持。一個多線程程序包含兩個或多個能并發(fā)運(yùn)行的部分。程序的每一部分都稱作一個線程,并且每個線程定義了一個獨(dú)立的執(zhí)行路徑。 多線程是多任務(wù)...

    MarvinZhang 評論0 收藏0
  • 一文讀懂Java線程狀態(tài)轉(zhuǎn)換

    摘要:前言本文描述線程線程狀態(tài)及狀態(tài)轉(zhuǎn)換,不會涉及過多理論,主要以代碼示例說明線程狀態(tài)如何轉(zhuǎn)換。被終止線程執(zhí)行完畢正常結(jié)束或執(zhí)行過程中因未捕獲異常意外終止都會是線程進(jìn)入被終止?fàn)顟B(tài)。線程執(zhí)行完畢打印狀態(tài)。 前言 本文描述Java線程線程狀態(tài)及狀態(tài)轉(zhuǎn)換,不會涉及過多理論,主要以代碼示例說明線程狀態(tài)如何轉(zhuǎn)換。 基礎(chǔ)知識 1. 線程狀態(tài) 線程可以有6種狀態(tài): New(新建) Runnable(可運(yùn)...

    summerpxy 評論0 收藏0
  • Java 幾種線程狀態(tài)之間相互關(guān)系

    摘要:線程可以處于以下狀態(tài)之一尚未啟動的線程處于此狀態(tài)。被阻塞等待監(jiān)視器鎖定的線程處于此狀態(tài)。無限期等待另一個線程執(zhí)行特定操作的線程處于此狀態(tài)。已退出的線程處于此狀態(tài)。調(diào)用的線程處于狀態(tài),以使指定的線程終止。 Java Thread 可能處在以下幾種狀態(tài) Java Doc 里通過一個枚舉類型 Enum 來定義。 線程可以處于以下狀態(tài)之一:showImg(https://segmentfaul...

    lsxiao 評論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ù)以百計。 線程是CPU的調(diào)度和分派的基本單位...

    ivyzhang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<