作用:
把指定的執行緒加入到當前執行緒,可以將兩個交替執行的執行緒合併為順序執行的執行緒。
分析:
如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 語句下面的 即繼續執行...