1. 程式人生 > >java中yield()和join()的用法

java中yield()和join()的用法

在java的多執行緒程式設計中,有可能會用到yield和join。在具體講解yield和join之前,我們先來看看java中執行緒的優先權。

執行緒的優先順序:

1.在沒有指定執行緒的優先順序的時候,執行緒都帶有普通的優先順序。

2.執行緒的優先順序可以分為1到10;10代表最高的優先順序,1代表最低的優先順序,普通優先順序是5.

3.優先順序最高的執行緒在執行時給予優先,但不能保證執行緒啟動後立刻就進入執行狀態。

4。與執行緒池中等待的執行緒相比,正在執行的執行緒擁有更高的優先順序。

5.由排程程式來決定執行哪一個執行緒。

6.用setProperty()來設定用執行緒的優先順序。

7.線上程的start方法呼叫之前,應該指定執行緒的優先順序。

下面我們來看看yield方法:

yield的意思是放棄,投降的意思。當前執行緒呼叫yield的時候,告訴虛擬機器它願意讓其他的執行緒搶佔自己的位置。者表明該執行緒沒有緊急的事要做,但這只是一種暗示,並不能保證一定會發生。

使用yield方法時要注意的幾點:

1.yield是一個靜態的本地方法(native)

2.呼叫yield後,yield告訴當前執行緒把執行機會交給執行緒池中有相同優先順序的執行緒。

3.yield不能保證,當前執行緒迅速從執行狀態切換到就緒狀態。

4.yield只能是將當前執行緒從執行狀態轉換到就緒狀態,而不能是等待或者阻塞狀態。

join方法:

執行緒例項的join()方法可以被用來join到執行緒執行的開始和其他執行緒執行的結束,所以直到其他執行緒執行結束這個執行緒才會執行。如果join的方法線上程例項中被呼叫,當前執行的執行緒會被堵塞,直到執行緒例項執行完成。


如中執行緒a中呼叫執行緒b的join方法,這時執行緒a就會進入阻塞狀態,直到執行緒b執行完成。這樣就可以使並行的執行緒序列化的執行。