亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言:

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

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

查看線程在JVM中有哪些不同的狀態(tài),最簡(jiǎn)單的方式是查看Jdk源碼的Thread.State類。以下內(nèi)容來(lái)自JDK文檔。在JVM中,一個(gè)線程可能處于下面的六種狀態(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. 因?yàn)榈却O(jiān)視器鎖而處于等待的線程處于這種狀態(tài)

WAITING

A thread that is waiting indefinitely for another thread to perform a particular action is in this state. 等待另一個(gè)線程執(zhí)行某些特別操作的線程處于這種狀態(tài)。補(bǔ)充:實(shí)際上,這個(gè)線程等待的條件稱為條件謂詞,這個(gè)線程等待的位置稱為條件隊(duì)列。來(lá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. 等待另一個(gè)線程執(zhí)行某些特別操作的線程(有時(shí)間限制)處于這種狀態(tài)

TERMINATED

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

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

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

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

如下圖:

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

針對(duì)上面的圖,可以詢問的面試點(diǎn)有很多。比如線程的監(jiān)視器鎖機(jī)制、比如線程協(xié)同的機(jī)制等等,讀者要結(jié)合圖片仔細(xì)研究。最后是一個(gè)例子,展示了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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Druid(新版starter)在SpringBoot下的使用教程

    Druid(新版starter)在SpringBoot下的使用教程

    Druid是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,DruidDataSource支持的數(shù)據(jù)庫(kù),這篇文章主要介紹了Druid(新版starter)在SpringBoot下的使用,需要的朋友可以參考下
    2023-05-05
  • Spring整合websocket整合應(yīng)用示例(下)

    Spring整合websocket整合應(yīng)用示例(下)

    這篇文章主要介紹了Spring整合websocket整合應(yīng)用示例(下)的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • 基于Java和GeoTools的Shapefile矢量數(shù)據(jù)縮略圖生成實(shí)踐

    基于Java和GeoTools的Shapefile矢量數(shù)據(jù)縮略圖生成實(shí)踐

    這篇文章主要介紹了基于Java和GeoTools的Shapefile矢量數(shù)據(jù)縮略圖生成實(shí)踐,需要的朋友可以參考下
    2024-08-08
  • Java設(shè)計(jì)模式之策略模式詳細(xì)解析

    Java設(shè)計(jì)模式之策略模式詳細(xì)解析

    這篇文章主要介紹了Java設(shè)計(jì)模式之策略模式詳細(xì)解析,策略模式中,定義算法族,分別封裝起來(lái),讓他們之間可以相互轉(zhuǎn)化,此模式讓算法的變化獨(dú)立于使用算法的客戶,需要的朋友可以參考下
    2023-11-11
  • Java設(shè)計(jì)模式之命令模式

    Java設(shè)計(jì)模式之命令模式

    這篇文章介紹了Java設(shè)計(jì)模式之命令模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Java線程變量ThreadLocal詳細(xì)解讀

    Java線程變量ThreadLocal詳細(xì)解讀

    這篇文章主要介紹了Java線程變量ThreadLocal詳細(xì)解讀,多線程訪問同一個(gè)變量的時(shí)候,很容易出現(xiàn)問題,特別是多線程對(duì)一個(gè)共享變量進(jìn)行寫入的時(shí)候,為了線程的安全在進(jìn)行數(shù)據(jù)寫入時(shí)候會(huì)進(jìn)行數(shù)據(jù)的同步,需要的朋友可以參考下
    2024-01-01
  • JAVA十大排序算法之基數(shù)排序詳解

    JAVA十大排序算法之基數(shù)排序詳解

    這篇文章主要介紹了java中的基數(shù)排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java開發(fā)常用類庫(kù)之Hutool詳解

    Java開發(fā)常用類庫(kù)之Hutool詳解

    這篇文章主要介紹了Java開發(fā)常用類庫(kù)之Hutool,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 淺析Java進(jìn)制轉(zhuǎn)換、輸入、命名問題

    淺析Java進(jìn)制轉(zhuǎn)換、輸入、命名問題

    這篇文章主要介紹了Java進(jìn)制轉(zhuǎn)換、輸入、命名問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • SpringBoot使用自定義注解實(shí)現(xiàn)權(quán)限攔截的示例

    SpringBoot使用自定義注解實(shí)現(xiàn)權(quán)限攔截的示例

    本篇文章主要介紹了SpringBoot使用自定義注解實(shí)現(xiàn)權(quán)限攔截的示例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-09-09

最新評(píng)論