最新国产好看的视频,伊人天堂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)的進行切換。而有些是單向的,比如終止后不能再次進入終止狀態(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é)大小問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • 深入理解java long 存儲時間戳

    深入理解java long 存儲時間戳

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

    Spring中自定義攔截器的使用

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

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

    在使用Spring開發(fā)的時候,配置的方式主要有兩種,一種是xml的方式,另外一種是 java config的方式,在使用的過程中,我們使用最多的注解應該就是@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)后臺向前端推送信息的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    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ā),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • springboot登陸頁面圖片驗證碼簡單的web項目實現(xiàn)

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

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

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

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

最新評論

肃宁县| 林州市| 麦盖提县| 临澧县| 孙吴县| 措勤县| 安顺市| 博爱县| 灯塔市| 新竹市| 田东县| 怀宁县| 常宁市| 奈曼旗| 云林县| 石门县| 荔浦县| 崇文区| 郧西县| 德江县| 眉山市| 玉溪市| 内江市| 若尔盖县| 老河口市| 陈巴尔虎旗| 青田县| 襄樊市| 牙克石市| 洪雅县| 偃师市| 霍邱县| 东莞市| 石棉县| 涟水县| 三河市| 永善县| 杭州市| 阿城市| 永吉县| 疏勒县|