最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java JVM中線程狀態(tài)詳解

 更新時間:2022年09月02日 09:14:39   作者:義臻  
這篇文章主要介紹了Java JVM中線程狀態(tài)詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的朋友可以參考一下

前言:

在Java面試中,線程的狀態(tài)也是被經(jīng)??疾斓闹R點,今天我們就來聊一聊線程狀態(tài)的那些事!

線程在JVM中的狀態(tài)

查看線程在JVM中有哪些不同的狀態(tài),最簡單的方式是查看Jdk源碼的Thread.State類。以下內(nèi)容來自JDK文檔。在JVM中,一個線程可能處于下面的六種狀態(tài)中的一種:

NEW

A thread that has not yet started is in this state. 沒有開始執(zhí)行的線程處于這種狀態(tài)

RUNNABLE

A thread executing in the Java virtual machine is in this state. 在JVM中執(zhí)行的線程處于這種狀態(tài)

BLOCKED

A thread that is blocked waiting for a monitor lock is in this state. 因為等待監(jiān)視器鎖而處于等待的線程處于這種狀態(tài)

WAITING

A thread that is waiting indefinitely for another thread to perform a particular action is in this state. 等待另一個線程執(zhí)行某些特別操作的線程處于這種狀態(tài)。補充:實際上,這個線程等待的條件稱為條件謂詞,這個線程等待的位置稱為條件隊列。來源大牛的書《Java Concurrency in Proactice》

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. 等待另一個線程執(zhí)行某些特別操作的線程(有時間限制)處于這種狀態(tài)

TERMINATED

A thread that has exited is in this state. 一個已經(jīng)執(zhí)行完畢的線程處于這種狀態(tài)

可見,一個線程在JVM中有6種不同的狀態(tài)。此處我想強調(diào)一下,這個線程在JVM中的狀態(tài),并不能反映操作系統(tǒng)級別的線程狀態(tài)。

線程在JVM中的狀態(tài)轉(zhuǎn)換

JDK源碼的注釋中詳細的描述了不同狀態(tài)之間在哪些條件下進行轉(zhuǎn)換,本文中我用一個圖來進行表示。 由于CPU的時間片輪轉(zhuǎn)機制,處于Runnable狀態(tài)的線程可以分為兩種:Ready(就緒)和Running(運行)。因此,我們的狀態(tài)圖中有7種狀態(tài)節(jié)點。

如下圖:

上圖中展示了線程在不同狀態(tài)之間的轉(zhuǎn)換情況,在調(diào)用與線程有關(guān)的方法后,線程會進入不同的線程狀態(tài),這些狀態(tài)之間某些是雙向的,比如WAITING和RUNNING之間可以循環(huán)的進行切換。而有些是單向的,比如終止后不能再次進入終止?fàn)顟B(tài)。

針對上面的圖,可以詢問的面試點有很多。比如線程的監(jiān)視器鎖機制、比如線程協(xié)同的機制等等,讀者要結(jié)合圖片仔細研究。最后是一個例子,展示了5種線程狀態(tài)(除Waiting狀態(tài))。

import java.util.concurrent.TimeUnit;

/**
 * Created by yizhenn on 2020/4/20.
 */
public class Demo{
    private static Object lock=new Object();
    public static void main(String[] args) throws Exception {
       Thread t1=new Thread(new Runnable() {
           @Override
           public void run() {
               synchronized (lock){
                   System.out.println("t1 executing...");
                   try {
                       TimeUnit.SECONDS.sleep(10);
                   }catch (Exception e){
                       e.printStackTrace();
                   }
               }
           }
       });
        Thread t2=new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock){
                    System.out.println("t2 executing...");
                    try {
                        TimeUnit.SECONDS.sleep(10);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }
        });
        System.out.println(t1.getState());
        System.out.println(t2.getState());
        t1.start();
        t2.start();
        System.out.println(t1.getState());
        System.out.println(t2.getState());
        TimeUnit.SECONDS.sleep(11);
        System.out.println(t1.getState());
        System.out.println(t2.getState());
        TimeUnit.SECONDS.sleep(11);
        System.out.println(t1.getState());
        System.out.println(t2.getState());
    }
}

到此這篇關(guān)于Java JVM中線程狀態(tài)詳解的文章就介紹到這了,更多相關(guān)JVM線程狀態(tài)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中char[] 和 String 類型占用字節(jié)大小問題

    Java中char[] 和 String 類型占用字節(jié)大小問題

    這篇文章主要介紹了Java中char[] 和 String 類型占用字節(jié)大小問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 深入理解java long 存儲時間戳

    深入理解java long 存儲時間戳

    存儲時間打算用時間戳來存儲,打算用long類型來代表時間戳,這篇文章主要介紹了深入理解java long 存儲時間戳,非常具有實用價值,需要的朋友可以參考下
    2018-10-10
  • Spring中自定義攔截器的使用

    Spring中自定義攔截器的使用

    大家好,本篇文章主要講的是Spring中自定義攔截器的使用,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 詳解Spring注解@Autowired的實現(xiàn)原理和使用方法

    詳解Spring注解@Autowired的實現(xiàn)原理和使用方法

    在使用Spring開發(fā)的時候,配置的方式主要有兩種,一種是xml的方式,另外一種是 java config的方式,在使用的過程中,我們使用最多的注解應(yīng)該就是@Autowired注解了,所以本文就給大家講講@Autowired注解是如何使用和實現(xiàn)的,需要的朋友可以參考下
    2023-07-07
  • spring整合cxf框架實例

    spring整合cxf框架實例

    下面小編就為大家?guī)硪黄猻pring整合cxf框架實例。小編覺得挺不錯的?,F(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息的示例

    SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息的示例

    這篇文章主要介紹了SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Spring?MVC實現(xiàn)GET請求接收Date類型參數(shù)

    Spring?MVC實現(xiàn)GET請求接收Date類型參數(shù)

    這篇文章主要介紹了Spring?MVC實現(xiàn)GET請求接收Date類型參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 微信小程序+后端(java)實現(xiàn)開發(fā)

    微信小程序+后端(java)實現(xiàn)開發(fā)

    這篇文章主要介紹了微信小程序+后端(java)實現(xiàn)開發(fā),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • springboot登陸頁面圖片驗證碼簡單的web項目實現(xiàn)

    springboot登陸頁面圖片驗證碼簡單的web項目實現(xiàn)

    這篇文章主要介紹了springboot登陸頁面圖片驗證碼簡單的web項目實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • IDEA去除掉代碼中虛線、波浪線和下劃線實線的方法

    IDEA去除掉代碼中虛線、波浪線和下劃線實線的方法

    初次安裝使用IDEA,總是能看到導(dǎo)入代碼后,出現(xiàn)很多的波浪線,下劃線和虛線,這是IDEA給我們的一些提示和警告,但是有時候我們并不需要,反而會讓人看著很不爽,這里簡單記錄一下自己的調(diào)整方法,供其他的小伙伴在使用的時候參考
    2024-09-09

最新評論

新疆| 克拉玛依市| 永修县| 台中市| 简阳市| 芒康县| 云和县| 抚松县| 团风县| 台州市| 句容市| 河曲县| 闸北区| 张家川| 桐庐县| 淮北市| 山阴县| 平潭县| 阿克陶县| 灌阳县| 巫山县| 张家口市| 曲麻莱县| 康保县| 巴林左旗| 金川县| 贵州省| 双桥区| 漾濞| 吴忠市| 台安县| 宜良县| 玉门市| 新沂市| 格尔木市| 隆安县| 南川市| 平武县| 广东省| 滦南县| 阳原县|