欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java多線程 線程狀態(tài)原理詳解

 更新時(shí)間:2020年02月09日 10:54:06   投稿:yaominghui  
這篇文章主要介紹了Java多線程 線程狀態(tài)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java多線程 線程狀態(tài)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

java.lang.Thread.State枚舉定義了6種線程狀態(tài)。

  • NEW: 尚未啟動(dòng)(start)的線程的線程狀態(tài)
  • RUNNABLE: 運(yùn)行狀態(tài),但線程可能正在JVM中執(zhí)行,也可能在等待CPU調(diào)度
  • BLOCKED: 線程阻塞,等待監(jiān)視器鎖以進(jìn)入同步代碼塊/方法
  • WAITING: 等待狀態(tài)。使用以下不帶超時(shí)的方式時(shí)會(huì)進(jìn)入:Object.wait、Thread.join、LockSupport.park。等待狀態(tài)的線程需要另一個(gè)線程激活。
  • TIMED_WAITING: 具有指定等待時(shí)間的等待狀態(tài),使用以下帶超時(shí)的方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil。
  • TERMINATED: 終止?fàn)顟B(tài)。線程正常執(zhí)行完畢或者發(fā)生異常。

狀態(tài)切換

狀態(tài) 條件 狀態(tài) 條件 狀態(tài)
NEW -(啟動(dòng))-》 RUNNABLE -(等待鎖)-》 BLOCKED
RUNNABLE 《-(拿到鎖)- BLOCKED
RUNNABLE -(等待其他線程通知)-》 WAITING
RUNNABLE 《-(收到其他線程通知)- WAITING
RUNNABLE -(有超時(shí)時(shí)間的,等待其他線程通知)-》 TIMED_WAITING
RUNNABLE 《-(收到其他線程通知,或者等待超時(shí))- TIMED_WAITING
RUNNABLE -(執(zhí)行結(jié)束)-》 TERMINATED

線程切換代碼示例

/**
 * 多線程運(yùn)行狀態(tài)切換示例
 */
public class Demo2 {

  public static void main(String[] args) throws Exception{
    //第一種狀態(tài)切換 新建->運(yùn)行->終止
    System.out.println("###第一種狀態(tài)切換 新建->運(yùn)行->終止###");
    Thread thread1 = new Thread(()->{
      System.out.println("thread1當(dāng)前狀態(tài):" + Thread.currentThread().getState());
      System.out.println("thread1執(zhí)行完畢");
    });
    System.out.println("調(diào)用start之前,thread1當(dāng)前狀態(tài):" + thread1.getState());
    thread1.start();
    Thread.sleep(2000L);  //等待thread1執(zhí)行結(jié)束
    System.out.println("等待thread1執(zhí)行結(jié)束,當(dāng)前狀態(tài):" + thread1.getState());
    System.out.println();
//    thread1.start();    //此時(shí)會(huì)拋出java.lang.IllegalThreadStateException

    //第二種狀態(tài)切換 新建->運(yùn)行->等待->運(yùn)行->終止
    System.out.println("###第二種狀態(tài)切換 新建->運(yùn)行->等待->運(yùn)行->終止###");
    Thread thread2 = new Thread(()->{
      try {
        Thread.sleep(1500L);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      System.out.println("thread2當(dāng)前狀態(tài):" + Thread.currentThread().getState());
      System.out.println("thread2執(zhí)行完畢");
    });
    System.out.println("調(diào)用start之前,thread2當(dāng)前狀態(tài):" + thread2.getState());
    thread2.start();
    System.out.println("調(diào)用start之后,thread2當(dāng)前狀態(tài):" + thread2.getState());
    Thread.sleep(200L);  //等待一段時(shí)間令thread2進(jìn)入sleep方法
    System.out.println("調(diào)用start之后,等待200毫秒,thread2當(dāng)前狀態(tài):" + thread2.getState());
    Thread.sleep(2000L);  //等待thread2執(zhí)行結(jié)束
    System.out.println("等待thread2執(zhí)行結(jié)束,當(dāng)前狀態(tài):" + thread2.getState());
    System.out.println();

    //第三種狀態(tài)切換 新建->運(yùn)行->阻塞->運(yùn)行->終止
    System.out.println("###第三種狀態(tài)切換 新建->運(yùn)行->阻塞->運(yùn)行->終止###");
    Thread thread3 = new Thread(()->{
      synchronized (Demo2.class){
        System.out.println("thread3當(dāng)前狀態(tài):" + Thread.currentThread().getState());
        System.out.println("thread3執(zhí)行完畢");
      }
    });
    synchronized (Demo2.class){
      System.out.println("調(diào)用start之前,thread3當(dāng)前狀態(tài):" + thread3.getState());
      thread3.start();
      System.out.println("調(diào)用start之后,thread3當(dāng)前狀態(tài):" + thread3.getState());
      Thread.sleep(200L);
      System.out.println("等待200毫秒,thread3等待獲取鎖,thread3當(dāng)前狀態(tài):" + thread3.getState());
    }
    Thread.sleep(1000L);    //等待thread3執(zhí)行完畢
    System.out.println("等待1秒,令thread3獲取鎖后執(zhí)行方法,thread3當(dāng)前狀態(tài):" + thread3.getState());
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot整合jsp,實(shí)現(xiàn)公交車(chē)站路線圖

    springboot整合jsp,實(shí)現(xiàn)公交車(chē)站路線圖

    這篇文章主要介紹了springboot整合jsp,實(shí)現(xiàn)公交車(chē)站路線圖的步驟,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2021-01-01
  • 關(guān)于SpringMVC在Controller層方法的參數(shù)解析詳解

    關(guān)于SpringMVC在Controller層方法的參數(shù)解析詳解

    在SpringMVC中,控制器Controller負(fù)責(zé)處理由DispatcherServlet分發(fā)的請(qǐng)求,下面這篇文章主要給大家介紹了關(guān)于SpringMVC在Controller層方法的參數(shù)解析的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • spring的jdbctemplate的crud的基類dao

    spring的jdbctemplate的crud的基類dao

    本文主要介紹了使用spring的jdbctemplate進(jìn)行增刪改查的基類Dao的簡(jiǎn)單寫(xiě)法,需要的朋友可以參考下
    2014-02-02
  • JAVA SpringBoot統(tǒng)一日志處理原理詳解

    JAVA SpringBoot統(tǒng)一日志處理原理詳解

    這篇文章主要介紹了SpringBoot的統(tǒng)一日志處理原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • JAVA學(xué)習(xí)進(jìn)階篇之時(shí)間與日期相關(guān)類

    JAVA學(xué)習(xí)進(jìn)階篇之時(shí)間與日期相關(guān)類

    在日常的開(kāi)發(fā)工作當(dāng)中,我們經(jīng)常需要用到日期相關(guān)的類,下面這篇文章主要給大家介紹了關(guān)于JAVA學(xué)習(xí)進(jìn)階篇之時(shí)間與日期相關(guān)類的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Java 實(shí)戰(zhàn)交易平臺(tái)項(xiàng)目之寵物在線商城系統(tǒng)

    Java 實(shí)戰(zhàn)交易平臺(tái)項(xiàng)目之寵物在線商城系統(tǒng)

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)寵物在線商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • SpringBoot RestTemplate請(qǐng)求日志打印方式

    SpringBoot RestTemplate請(qǐng)求日志打印方式

    這篇文章主要介紹了SpringBoot RestTemplate請(qǐng)求日志打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • JDK(免安裝)各種版本下載及配置詳細(xì)圖文教程

    JDK(免安裝)各種版本下載及配置詳細(xì)圖文教程

    這篇文章主要給大家介紹了關(guān)于JDK(免安裝)各種版本下載及配置的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-07-07
  • MAC?在類路徑或引導(dǎo)類路徑中找不到程序包?java.lang問(wèn)題

    MAC?在類路徑或引導(dǎo)類路徑中找不到程序包?java.lang問(wèn)題

    這篇文章主要介紹了MAC?在類路徑或引導(dǎo)類路徑中找不到程序包?java.lang問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • mybatis分頁(yè)及模糊查詢功能實(shí)現(xiàn)

    mybatis分頁(yè)及模糊查詢功能實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)為大家詳細(xì)介紹了mybatis實(shí)現(xiàn)分頁(yè)及模糊查詢功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評(píng)論