摘要:運行中,線程狀態中并沒有這一狀態,但是實際執行中是有的可運行狀態的線程獲得了時間片,執行程序代碼。其他阻塞運行的線程發出了請求時,會把該線程置為阻塞狀態。當處理完畢時,線程重新轉入可運行狀態。
Thread.State
首先看JDK中的代碼: java.lang.Thread.State
/** * A thread state. A thread can be in one of the following states: * 一個線程的狀態,一個線程可以處于以下狀態中的某一個狀態 *
* 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: *
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: *
新創建了一個線程對象,還未調用start()方法。
2、就緒(Runnable)線程對象創建后,其他線程(比如main線程)調用了該對象的start()方法。該狀態的線程位于可運行線程池中,等待被線程調度選中 獲取cpu 的使用權 。
3、運行中(Running,線程狀態中并沒有這一狀態,但是實際執行中是有的)可運行狀態(runnable)的線程獲得了cpu 時間片(timeslice) ,執行程序代碼。
4、限期等待(Timed Waiting)也可以稱作 TIMED_WAITING(有等待時間的等待狀態)。
線程主動調用以下方法:
Thread.sleep方法;
Object的wait方法,帶有時間;
Thread.join方法,帶有時間;
LockSupport的parkNanos方法,帶有時間。
5、無限期等待(Waiting)運行中(Running)的線程執行了以下方法:
Object的wait方法,并且沒有使用timeout參數;
Thread的join方法,沒有使用timeout參數;
LockSupport的park方法;
Conditon的await方法。
6、阻塞(Blocked)阻塞狀態是指線程因為某種原因放棄了cpu 使用權,暫時停止運行。直到線程進入可運行(runnable)狀態,才有機會再次獲得cpu timeslice 轉到運行(running)狀態。阻塞的情況分兩種:
同步阻塞:運行(running)的線程進入了一個synchronized方法,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池(lock pool)中。
其他阻塞:運行(running)的線程發出了I/O請求時,JVM會把該線程置為阻塞狀態。當I/O處理完畢時,線程重新轉入可運行(runnable)狀態。
7、結束(Terminated)線程run()、main() 方法執行結束,或者因異常退出了run()方法,則該線程結束生命周期。
線程狀態探秘jstack查看線程狀態
jstack -l
隨便寫一個死循環看一下
public class TestThreadState { public static void main(String[] args) { for (; ; ) { ? } } }
ps -ef|grep TestThreadState,找到對應的pid,jstack -l
"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)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73905.html
摘要:在領域,實現并發程序的主要手段就是多線程。可運行狀態指的是線程可以分配執行。當等待的事件出現了,線程就會從休眠狀態轉換到可運行狀態。導出線程棧,分析線程狀態是診斷并發問題的一個重要工具。 在 Java 領域,實現并發程序的主要手段就是多線程。線程是操作系統里的一個概念,雖然各種不同的開發語言如 Java、C# 等都對其進行了封裝,但原理和思路都是相同都。Java 語言里的線程本質上就是...
摘要:線程,有時被稱為輕量級進程,,是程序執行流的最小單元。由于線程之間的相互制約,致使線程在運行中呈現出間斷性。在單個程序中同時運行多個線程完成不同的工作,稱為多線程。當狀態超時等待線程終止或者超時或者處理完畢時,線程重新轉入就緒狀態。 java多線程,先要知道什么是線程(Threads),為什么要使用多線程。 線程,有時被稱為輕量級進程(Lightweight Process,LWP),...
摘要:當狀態超時等待線程終止或者超時或者處理完畢時,線程重新轉入就緒狀態。死亡狀態線程執行完了或者因異常退出了方法,該線程結束生命周期。線程加入方法,等待其他線程終止。一系列線程以某種順序啟動并不意味著將按該順序執行。 初遇 Java給多線程編程提供了內置的支持。一個多線程程序包含兩個或多個能并發運行的部分。程序的每一部分都稱作一個線程,并且每個線程定義了一個獨立的執行路徑。 多線程是多任務...
摘要:前言本文描述線程線程狀態及狀態轉換,不會涉及過多理論,主要以代碼示例說明線程狀態如何轉換。被終止線程執行完畢正常結束或執行過程中因未捕獲異常意外終止都會是線程進入被終止狀態。線程執行完畢打印狀態。 前言 本文描述Java線程線程狀態及狀態轉換,不會涉及過多理論,主要以代碼示例說明線程狀態如何轉換。 基礎知識 1. 線程狀態 線程可以有6種狀態: New(新建) Runnable(可運...
摘要:線程可以處于以下狀態之一尚未啟動的線程處于此狀態。被阻塞等待監視器鎖定的線程處于此狀態。無限期等待另一個線程執行特定操作的線程處于此狀態。已退出的線程處于此狀態。調用的線程處于狀態,以使指定的線程終止。 Java Thread 可能處在以下幾種狀態 Java Doc 里通過一個枚舉類型 Enum 來定義。 線程可以處于以下狀態之一:showImg(https://segmentfaul...
摘要:線程的生命周期線程的生命周期大致可以分為下面五種狀態新建狀態就緒狀態運行狀態休眠狀態終止狀態新建狀態,是線程被創建且未啟動的狀態這里的創建,僅僅是在的這種編程語言層面被創建,而在操作系統層面,真正的線程還沒有被創建。 概要 目前CPU的運算速度已經達到了百億次每秒,甚至更高的量級,家用電腦即使維持操作系統正常運行的進程也會有數十個,線程更是數以百計。 線程是CPU的調度和分派的基本單位...
閱讀 3253·2021-11-11 11:00
閱讀 2573·2019-08-29 11:23
閱讀 1456·2019-08-29 10:58
閱讀 2335·2019-08-29 10:58
閱讀 2960·2019-08-23 18:26
閱讀 2516·2019-08-23 18:18
閱讀 2048·2019-08-23 16:53
閱讀 3422·2019-08-23 13:13