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 語句下面的 即繼續執行...