多執行緒學習(三) 執行緒的屬性

2021-09-28 17:56:01 字數 2155 閱讀 7507

屬性名稱

用途注意事項

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 功能 獲得 設定執行緒的作用域 標頭...