Thread
類的join()
方法等待執行緒死亡。當希望一個執行緒等待另一個執行緒完成時使用它。 這個過程就像一場接力賽,第二個跑步者等到第一個跑步者來到並將旗幟移交給他。
語法
public final void join()throws InterruptedException
public void join(long millis)throwsInterruptedException
public final void join(long millis, int nanos)throws InterruptedException
引數
millis
:它定義等待的時間,以毫秒為單位。nanos
:0-999999
等待的額外納秒。異常
IllegalArgumentException
:如果millis
的值為負,或者nanos
的值不在0-999999
範圍內,則丟擲此異常InterruptedException
:如果任何執行緒中斷了當前執行緒,則丟擲此異常。 丟擲此異常時,將清除當前執行緒的中斷狀態。範例一
public class JoinExample1 extends Thread
{
public void run()
{
for(int i=1; i<=4; i++)
{
try
{
Thread.sleep(500);
}catch(Exception e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[])
{
// creating three threads
JoinExample1 t1 = new JoinExample1();
JoinExample1 t2 = new JoinExample1();
JoinExample1 t3 = new JoinExample1();
// thread t1 starts
t1.start();
// starts second thread when first thread t1 is died.
try
{
t1.join();
}catch(Exception e){System.out.println(e);}
// start t2 and t3 thread
t2.start();
t3.start();
}
}
執行上面範例程式碼,得到以下結果:
1
2
3
4
1
1
2
2
3
3
4
4
在上面的範例1 中,當t1
完成其任務時,t2
和t3
開始執行。
範例二
public class JoinExample2 extends Thread
{
public void run()
{
for(int i=1; i<=5; i++)
{
try
{
Thread.sleep(500);
}catch(Exception e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[])
{
// creating three threads
JoinExample2 t1 = new JoinExample2();
JoinExample2 t2 = new JoinExample2();
JoinExample2 t3 = new JoinExample2();
// thread t1 starts
t1.start();
// starts second thread when first thread t1 is died.
try
{
t1.join(1500);
}catch(Exception e){System.out.println(e);}
// start t2 and t3 thread
t2.start();
t3.start();
}
}
執行上面範例程式碼,得到以下結果:
1
2
3
1
1
4
2
2
5
3
3
4
4
5
5
在上面的範例2中,當t1
完成其任務1500毫秒(3次)後,然後t2
和t3
開始執行。