日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java多线程:线程属性

發布時間:2025/3/21 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java多线程:线程属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# 線程屬性

  • id:

    • 線程唯一標識。自動生成。不允許修改。

  • name:

    • 線程的名字,可以自定義成有具體含義的名字,便于識別不同作用的線程。(可同名)

  • isDaemon:

    • 是否是守護線程。

    • true=守護線程,false=用戶線程。

    • 當JVM中所有的線程都是守護線程,JVM將退出。

    • 具有代表性的線程: main線程:用戶線程,gc線程:守護線程。

    • 子線程會默認繼承父線程的這個屬性。

    • 必須在調用start()之前設置這個屬性,線程運行中設置線程守護屬性會拋出異常。

  • priority

    • 線程優先級。

    • 優先級高的線程概率上會優先運行。并不可靠.

    • Java中的線程優先級有10個,默認是5,且子線程會繼承父線程的優先級。

    • 不可靠:java中的線程優先級有10個,但是OS的線程優先級并不一定是10個,所以存在java中好幾個優先級對應OS中的同一個優先級,不可靠。

      • 程序不應該依賴優先級。

      • 優先級一般默認設置成5即可。

# ID

  • 源碼

????/*?For?generating?thread?ID?*/private?static?long?threadSeqNumber;private?void?init(ThreadGroup?g,?Runnable?target,?String?name,long?stackSize,?AccessControlContext?acc,boolean?inheritThreadLocals)?{.../*?Set?thread?ID?*/tid?=?nextThreadID();...}private?static?synchronized?long?nextThreadID()?{return?++threadSeqNumber;}
  • 線程初始化方法init()會給線程設置id,該id通過被synchronized標記的nextThreadID()方法獲取,id自增。

# NAME

  • 源碼:

  • 如果沒有指定線程的名稱,則默認是"Thread-" + nextThreadNum()。nextThreadNum()為線程安全的一個自增。

????private?static?synchronized?int?nextThreadNum()?{return?threadInitNumber++;}
  • 還可以通過thread.setName()設置線程名稱。

# 代碼演示

/***?@author?喜歡天文的pony站長*?Created?on?2020/6/16.*/ public?class?ThreadProperties?{private?static?final?Logger?LOGGER?=?LoggerFactory.getLogger(ThreadProperties.class);public?static?void?main(String[]?args)?{Thread?mainThread?=?Thread.currentThread();Thread?childThread?=?new?Thread(()?->?{try?{TimeUnit.SECONDS.sleep(2L);}?catch?(InterruptedException?e)?{e.printStackTrace();Thread.currentThread().interrupt();}});//必須在start()之前設置線程的優先級//childThread.setDaemon(true);childThread.start();LOGGER.info("main線程的id:{}",?mainThread.getId());LOGGER.info("子線程的id:{}",?childThread.getId());LOGGER.info("main線程的名字:{}",?mainThread.getName());LOGGER.info("子線程的名字(修改之前):{}",?childThread.getName());childThread.setName("childThread-1");LOGGER.info("子線程的名字(修改之后):{}",?childThread.getName());LOGGER.info("main線程是否是守護線程{}",?mainThread.isDaemon());LOGGER.info("子線程線程是否是守護線程{}",?childThread.isDaemon());//不能在線程運行過程中設置線程的優先級childThread.setDaemon(true);LOGGER.info("子線程線程是否是守護線程{}",?childThread.isDaemon());} }
  • 結果

總結

以上是生活随笔為你收集整理的Java多线程:线程属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。