線程屬性
線程ID, 線程名稱,線程類別(是否守候進程),線程組,線程優(yōu)先級
線程ID:Thread類自己管理ID,在Thread類中的nextThreadNum()方法來獲取線程Id的值,在java中所有的線程創(chuàng)建都共享同一個線程id變量,每次新增一個線程id值會增加1,具體實現(xiàn)如下:

上面是產(chǎn)生具體線程號的方法,在Thread類中,保存線程id號是用下面的字段來保存:

在創(chuàng)建線程Thread類的對象的時候,把threadSeqNumber值付給tid:

jdk只提供了Thread.getId()來獲取線程的id號,沒有提供設(shè)置ID號的方法。
線程名稱:線程名稱在線程定義的時候用戶可以自己傳入一個值,
? ? ? ? ? ? ? ? ? Thread t = new Thread("thread name");
如果用戶自定義線程名稱,Thread類會自己生產(chǎn)一個線程名稱:

jdk提供了獲取和設(shè)置線程名稱的API:

線程類別:判斷線程是否是守候線程,如果true表示線程是守候線程。用戶線程會阻止java虛擬機的正常停止,守候線程表示當虛擬機結(jié)束的時候,守候線程即使沒有執(zhí)行完,也會不會阻止java虛擬機的正常停止,注意線程設(shè)置守護線程必須是在線程啟動之前設(shè)置。
jdk提供了設(shè)置和判斷守護線程的方法:

線程優(yōu)先級:初始化線程優(yōu)先級為5,范圍是1-10,優(yōu)先級具體實現(xiàn)依賴于不同的操作系統(tǒng)平臺。JDK提供了設(shè)置和獲取線程優(yōu)先級的方法:

線程組:每個線程都屬于某一個線程組,如果沒有指定線程組,那么歸屬于父線程所在的線程組。如果用戶需要自己指定某個線程組,那么需要創(chuàng)建一個線程組:

JDK提供了兩個構(gòu)造方法來創(chuàng)建線程組:
public ThreadGroup(String name)
public ThreadGroup(ThreadGroup parent, String name)
一個提供線程組名稱,另外一個需要提供線程組的父線程組和線程組名稱。如果使用第一個構(gòu)造方法,那么默認將使用當前線程所在線程組作為parent的值:

啟動main方法的線程,所在的線程組名稱是main,該線程組的最大優(yōu)先級是10,凡是通過main方法所在的線程啟動的線程,如果不指定線程組,那么默認就屬于main線程組。而執(zhí)行main方法的線程所在線程組的父線程組是system線程組:

system線程組是由jvm創(chuàng)建:

自定義的線程組為該線程組設(shè)置了最大優(yōu)先級:
threadGroup.setMaxPriority(Thread.NORM_PRIORITY);
設(shè)置了最大優(yōu)先級,那么放入該線程中的所有線程的最大優(yōu)先級不能超過該值。那么jdk是如何保證這一點呢?請看如下代碼:

這段是調(diào)用線程組的setMaxPriority(pir),他會把它自己組內(nèi)所有的線程的優(yōu)先級設(shè)置為pir的值。如果一個線程A,在該線程組內(nèi),調(diào)用線程A的方法去設(shè)置線程的優(yōu)先級呢?看Thread類的setPriority方法:

圖中紅色部分表示為線程設(shè)置優(yōu)先級的時候,如果優(yōu)先級大于該線程所屬的線程組的最大優(yōu)先級的時候,安裝線程組的最大優(yōu)先級來設(shè)置。
線程基本屬性結(jié)束到這里,下一篇介紹線程的狀態(tài)。