線程並行執行轉為串行的法寶 join()
阿新 • • 發佈:2018-09-07
運行 catch exception str lis string art interrupt new t
如果沒有經過特殊處理,線程和線程之間是並行運行的,如何讓它們串行執行呢?
(1)一種是使用無參的join(),等到另一個線程執行完畢再繼續運行;
(2)一種是使用帶參的join(long millis) ,等待一定的時間後,無論另一個線程是否執行完畢,都繼續執行。
public class Thread1 extends Thread {
@Override
public void run() {
System.out.println("線程Thread1開始執行");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("線程Thread1執行完畢");
}
}
public class Thread2 extends Thread {
private Thread1 thread1;
public Thread2(Thread1 thread1) {
this.thread1 = thread1;
}
@Override
public void run() {
try {
// 時間超過了1000ms,則放棄等待,繼續執行
thread1.join(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("線程Thread2開始執行");
System.out.println("線程Thread2執行完畢");
}
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2(t1);
t1.start();
t2.start();
}
}
線程並行執行轉為串行的法寶 join()