屬性名稱
用途注意事項
id每個執行緒都有自己的id,用於識別不同的執行緒
被後續建立的執行緒使用;不允許被修改
name
便於使用者在開發、除錯或執行過程中區分每個不同的執行緒、定位問題等
清晰有意義的名字;預設的名稱
isdaemon
true:代表是守護執行緒,false:非守護執行緒(使用者執行緒)
繼承父執行緒;setdaemon
priority
優先順序,是告訴執行緒排程器,使用者希望哪些執行緒相對多執行、哪些少執行
預設和父執行緒的優先性相等;不應該依賴優先順序;預設5,最大10
id 是自增的,預設threadseqnumber初始化值為 0,但因為是先++,因此第乙個執行緒(main執行緒)的id 為 1。
得出結論,執行緒 id 是從 1 開始的。
id 從 1 開始在下列**中得到了驗證,但為什麼我們新建的子執行緒的 id 卻是從 11 開始呢?
public
class
id}
main 的id : 1
thread-0 的id : 11
thread-1 的id : 12
我們在debugger的threads視窗可以看到,jvm幫我們在背後建立了多個執行緒
(debug模式啟動後,最後輸出變為了 13、14,所以debug模式會多啟2個執行緒)
預設執行緒名稱從 thread-0 開始自增
原始碼中可看到,後++,因此從 0 開始
和 id 相同,它們都是被synchronized修飾的,因此在多執行緒下不會出現重複的id和name
如果要設定執行緒名稱,可以在構建執行緒時傳入,如new thread("orcas");
也可以在之後通過呼叫setname(string name)
方法設定
除了執行緒內部的 name 屬性,還有乙個nativename
屬性,它的set方法被native修飾,是c++層的名稱,if 判斷語句表示當執行緒啟動時(threadstatus=0 表示執行緒未啟動),不能再修改 nativename。
作用:
給使用者執行緒提供服務
特性:
執行緒型別預設繼承自父執行緒
jvm自動啟動
不影響jvm退出
與普通執行緒的區別:
整體無區別,唯一的區別在於是否影響jvm退出
使用者執行緒是執行邏輯的,守護執行緒是服務使用者執行緒的
是否需要給執行緒設定為守護執行緒?
不該設定為守護執行緒,一旦把使用者執行緒設定為守護執行緒,當剩下的全部都是守護執行緒時,jvm會退出,使正在執行的邏輯中斷,導致資料不一致。
public
final
static
int min_priority =1;
public
final
static
int norm_priority =5;
public
final
static
int max_priority =
10;
最大10個級別,預設5,最小是1
程式設計不該依賴於優先順序:
優先順序高度依賴作業系統,不同作業系統對於優先順序的對映、排程不一樣
系統中有乙個優先順序推進器,它會更改優先順序
Linux多執行緒學習(三)執行緒屬性
執行緒的建立函式pthread creat的第二個引數為pthread attr t型別的指標 預設屬性建立執行緒時賦值null pthread attr t是乙個結構體型別,定義如下 typedef struct pthread attr t 執行緒屬性的使用步驟 建立屬性物件 以預設值初始化屬性...
Posix多執行緒筆記(三) 執行緒屬性(2)
四 執行緒的排程策略 函式pthread attr setschedpolicy和pthread attr getschedpolicy分別用來設定和得到執行緒的排程策略。4.名稱 pthread attr getschedpolicy pthread attr setschedpolicy 功能 ...
Posix多執行緒筆記(三) 執行緒屬性(3)
六 執行緒的作用域 函式pthread attr setscope和pthread attr getscope分別用來設定和得到執行緒的作用域,這兩個函式的定義如下 7 名稱 pthread attr setscope pthread attr getscope 功能 獲得 設定執行緒的作用域 標頭...