Java多线程:线程属性
生活随笔
收集整理的這篇文章主要介紹了
Java多线程:线程属性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# 線程屬性
-
id:
-
線程唯一標識。自動生成。不允許修改。
-
-
name:
-
線程的名字,可以自定義成有具體含義的名字,便于識別不同作用的線程。(可同名)
-
-
isDaemon:
-
是否是守護線程。
-
true=守護線程,false=用戶線程。
-
當JVM中所有的線程都是守護線程,JVM將退出。
-
具有代表性的線程: main線程:用戶線程,gc線程:守護線程。
-
子線程會默認繼承父線程的這個屬性。
-
必須在調用start()之前設置這個屬性,線程運行中設置線程守護屬性會拋出異常。
-
-
priority
-
線程優先級。
-
優先級高的線程概率上會優先運行。并不可靠.
-
Java中的線程優先級有10個,默認是5,且子線程會繼承父線程的優先級。
-
不可靠:java中的線程優先級有10個,但是OS的線程優先級并不一定是10個,所以存在java中好幾個優先級對應OS中的同一個優先級,不可靠。
-
程序不應該依賴優先級。
-
優先級一般默認設置成5即可。
-
-
# ID
-
源碼
-
線程初始化方法init()會給線程設置id,該id通過被synchronized標記的nextThreadID()方法獲取,id自增。
# NAME
-
源碼:
-
如果沒有指定線程的名稱,則默認是"Thread-" + nextThreadNum()。nextThreadNum()為線程安全的一個自增。
-
還可以通過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多线程:线程属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java多线程:捕获线程异常
- 下一篇: 聊聊大厂面试官必问的 MySQL 锁机制