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

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

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

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

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

  • NEW: 尚未啟動(start)的線程的線程狀態(tài)
  • RUNNABLE: 運行狀態(tài),但線程可能正在JVM中執(zhí)行,也可能在等待CPU調(diào)度
  • BLOCKED: 線程阻塞,等待監(jiān)視器鎖以進入同步代碼塊/方法
  • WAITING: 等待狀態(tài)。使用以下不帶超時的方式時會進入:Object.wait、Thread.join、LockSupport.park。等待狀態(tài)的線程需要另一個線程激活。
  • TIMED_WAITING: 具有指定等待時間的等待狀態(tài),使用以下帶超時的方式: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 -(啟動)-》 RUNNABLE -(等待鎖)-》 BLOCKED
RUNNABLE 《-(拿到鎖)- BLOCKED
RUNNABLE -(等待其他線程通知)-》 WAITING
RUNNABLE 《-(收到其他線程通知)- WAITING
RUNNABLE -(有超時時間的,等待其他線程通知)-》 TIMED_WAITING
RUNNABLE 《-(收到其他線程通知,或者等待超時)- TIMED_WAITING
RUNNABLE -(執(zhí)行結(jié)束)-》 TERMINATED

線程切換代碼示例

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

  public static void main(String[] args) throws Exception{
    //第一種狀態(tài)切換 新建->運行->終止
    System.out.println("###第一種狀態(tài)切換 新建->運行->終止###");
    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();    //此時會拋出java.lang.IllegalThreadStateException

    //第二種狀態(tài)切換 新建->運行->等待->運行->終止
    System.out.println("###第二種狀態(tài)切換 新建->運行->等待->運行->終止###");
    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);  //等待一段時間令thread2進入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)切換 新建->運行->阻塞->運行->終止
    System.out.println("###第三種狀態(tài)切換 新建->運行->阻塞->運行->終止###");
    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());
  }
}

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

相關(guān)文章

  • 用java WebSocket做一個聊天室

    用java WebSocket做一個聊天室

    這篇文章主要為大家詳細介紹了用java WebSocket做一個聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • springboot配置文件綁定實現(xiàn)解析

    springboot配置文件綁定實現(xiàn)解析

    這篇文章主要介紹了springboot配置文件綁定實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java8新特性詳解與實戰(zhàn)分享

    Java8新特性詳解與實戰(zhàn)分享

    Java 8作為Java語言的一個重要更新,引入了一系列新特性,這些特性不僅提高了代碼的可讀性和可維護性,還增強了程序的性能,本文將詳細介紹Java 8中的幾個關(guān)鍵使用技巧,并通過代碼案例來展示它們的應(yīng)用,需要的朋友可以參考下
    2024-06-06
  • java將word轉(zhuǎn)pdf的方法示例詳解

    java將word轉(zhuǎn)pdf的方法示例詳解

    這篇文章主要介紹了java將word轉(zhuǎn)pdf的相關(guān)資料,文中講解了使用Aspose-Words工具將Word文檔轉(zhuǎn)換為PDF的優(yōu)劣,并提供了一種在Java項目中使用Aspose-Words進行Word轉(zhuǎn)PDF的示例方法,需要的朋友可以參考下
    2025-01-01
  • 解析java中volatile關(guān)鍵字

    解析java中volatile關(guān)鍵字

    這篇文章主要為大家解析了java中volatile關(guān)鍵字,經(jīng)常有人把volatile關(guān)鍵字和synchronized或者lock混淆,本文就為大家好好區(qū)分,感興趣的小伙伴們可以參考一下
    2016-01-01
  • ObjectMapper 如何忽略字段大小寫

    ObjectMapper 如何忽略字段大小寫

    這篇文章主要介紹了使用ObjectMapper實現(xiàn)忽略字段大小寫操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java語言的Comparable和Comparator區(qū)別

    Java語言的Comparable和Comparator區(qū)別

    這篇文章主要介紹了Java語言的Comparable和Comparator區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • java讀取文件內(nèi)容的三種方法代碼片斷分享(java文件操作)

    java讀取文件內(nèi)容的三種方法代碼片斷分享(java文件操作)

    本文介紹java讀取文件內(nèi)容的三種方法,代碼可以直接放到程序中使用,大家參考使用吧
    2014-01-01
  • SpringBoot整合SpringSecurity實現(xiàn)認(rèn)證攔截的教程

    SpringBoot整合SpringSecurity實現(xiàn)認(rèn)證攔截的教程

    我們寫的任何一個項目,都應(yīng)該有安全防護,不應(yīng)該讓這個項目進行“裸奔”,否則很容易被別人進行攻擊。而在SpringBoot環(huán)境中,其實可以很容易實現(xiàn)安全保護,本文給大家介紹SpringBoot如何整合SpringSecurity實現(xiàn)認(rèn)證攔截,需要的朋友可以參考下
    2023-05-05
  • 如何用Springboot快速整合shiro安全框架

    如何用Springboot快速整合shiro安全框架

    這篇文章主要介紹了如何用SpringBoot快速整合shiro安全框架,shiro原名Apache Shiro 是一個Java 的安全(權(quán)限)框架。Shiro 可以非常容易的開發(fā)出足夠好的應(yīng)用,感興趣的同學(xué)可以參考閱讀
    2023-04-04

最新評論

台北市| 维西| 隆子县| 凭祥市| 揭西县| 明光市| 甘孜| 休宁县| 广宁县| 敦化市| 奉化市| 常宁市| 盈江县| 桦甸市| 德州市| 盐源县| 越西县| 浦县| 潮州市| 德保县| 洛隆县| 吴桥县| 建平县| 苏尼特右旗| 新乐市| 朝阳区| 屯门区| 江川县| 垫江县| 彭泽县| 循化| 望江县| 交城县| 兴文县| 襄城县| 鹿泉市| 临武县| 四会市| 宁海县| 西宁市| 巴彦淖尔市|