多執行緒學習 如何改變執行緒執行順序

2021-10-03 05:18:52 字數 1944 閱讀 3773

作用:

把指定的執行緒加入到當前執行緒,可以將兩個交替執行的執行緒合併為順序執行的執行緒。
分析:

如main方法下有如下**

t1.

start()

; t2.

start()

; t1.

join()

; t3.

start()

;

則執行過程為,jvm啟動main執行緒,mian執行緒順序啟動t1、t2兩個執行緒,t1、t2交替

執行,此時執行t1.join 則會導致main執行緒獲取到鎖進入等待狀態,直到執行緒t1結束,

然後main執行緒被喚醒,開始啟動t3,t2、t3交替執行。

使用:
thread t0 =

newthread()

; t0.

start()

; t0.

join()

;-- 呼叫join方法,等待執行緒t執行完畢

t0.join(1

);-- 要等待的最長時間(以毫秒為單位)

t0.join(1

,1);

-- 毫秒,微妙

原始碼:

同步方法,底層呼叫的時object.wait()

public

final

synchronized

void

join

(long millis)

throws interruptedexception

if(millis ==0)

}else

wait

(delay)

; now = system.

currenttimemillis()

- base;}}

}public

final

native

void

wait

(long timeout)

throws interruptedexception;

案例

在main執行緒中join

thread t0 =

newthread

(new

runnable()

}},"to執行緒");

t0.start()

;t0.

join()

;system.out.

println

("main 執行緒結束"

);

執行結果:

to執行緒執行

to執行緒執行

main 執行緒結束

其他執行緒中呼叫join()

thread t0 =

newthread

(new

runnable()

},"t0子執行緒");

t0.start()

;try

catch

(interruptedexception e)

for(

int i=

0;i<

100;i++)}

},"to執行緒");

t0.start()

;t0.

join()

;system.out.

println

("main 執行緒結束"

);

執行結果為

t0子執行緒  to執行緒  main 執行緒

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

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