如何控制玩轉多執行緒

2021-07-30 16:00:41 字數 1561 閱讀 6369

join():讓乙個執行緒等待另乙個執行緒完成的方法。

join(long millis):在millis內被join的執行緒沒有執行結束,則不再等待。

public

class

jointhread

extends

thread

public

void

run()}

public

static

void

main

(string[

] args)

throws exception

system.out.

println

(thread.

currentthread()

.getname()

+" "

+i);}}

}

控制台輸出:

被join的執行緒 96

被join的執行緒 97

被join的執行緒 98

被join的執行緒 99

main 20

main 21

main 22

main 23

main 24

main 25

任務:為其他的執行緒提供服務

特徵:如果所有的前台執行緒都死亡,後台執行緒會自動死亡。

setdaemon(true)方法將指定執行緒設為後台執行緒(必須在start()方法之前呼叫)。

isdaemon()方法用來判斷指定執行緒是否為後台執行緒。

sleep():讓正在執行的執行緒暫停一段時間,並進入阻塞狀態。

sleep(long millis):設定暫停時間

public

class

sleepthread

extends

thread

}}

控制台輸出:

yield():讓正在執行的執行緒暫停,但不會阻塞該執行緒,而是轉入就緒狀態。

(1)sleep()方法暫停當前執行緒後,會給其他執行緒執行機會,不會理會其他執行緒的優先順序;但yield()方法只會給優先順序相同、或優先順序更高的執行緒執行機會。

(2)sleep()方法會將執行緒轉入阻塞狀態,直到經過阻塞時間才會轉入就緒狀態;而yield()不會將執行緒轉入阻塞狀態,它只是強制當前執行緒進入就緒狀態。因為完全有可能某個執行緒呼叫yield()方法暫停之後,立即再次獲得處理器資源被執行。

(3)sleep()方法宣告丟擲了interruptedexception異常,所以呼叫sleep()方法時要麼捕捉該異常,要麼顯式宣告丟擲該異常;而yield()方法則沒有宣告丟擲任何異常。

(4)sleep()方法比yield()有更好的移植性,通常不建議使用yield()方法來控制併發執行緒的執行。

thread類提供了setpriority(int newpriority)、getpriority()方法來設定執行緒優先順序。取值在1~10之間。

max_priority:其值是10

min_priority:其值是1

norm_priority:其值是5

如何控制多執行緒執行順序

如果我們new了好幾個執行緒,然後開始執行,肯定不是按照順序執行的,因為多執行緒.start 方法開始執行之後,並不意味著立即執行,而是到就緒狀態,等待cpu的排程,cpu如何排程,那我們就沒法知道了,但是如何讓執行緒按照指定的順序來執行呢?我們可以利用執行緒的join方法。join 方法的主要作用...

如何控制多執行緒執行順序

如果我們new了好幾個執行緒,然後開始執行,肯定不是按照順序執行的,因為多執行緒.start 方法開始執行之後,並不意味著立即執行,而是到就緒狀態,等待cpu的排程,cpu如何排程,那我們就沒法知道了,但是如何讓執行緒按照指定的順序來執行呢?我們可以利用執行緒的join方法。join 方法的主要作用...

多執行緒02 如何控制線程執行順序

這裡使用join 方法 api中那句 等待該執行緒終止 主語是join方法被呼叫時所處的執行緒,該執行緒 是指呼叫join方法的執行緒。比如現在有a b兩個執行緒物件,在a執行緒 現b.join 那麼a執行緒將會被阻塞 或者說掛起 直到b執行緒執行完畢才會繼續執行b.join 語句下面的 即繼續執行...