[英]Thread.join not working
對join()的調用保證使當前線程停止執行,直到它加入的線程(換句話說,它調用join()的線程)完成。
但是,在我的程序中,兩個線程同時執行。 Thread1沒有等待Thread2完成執行。
我的計划有什么問題?
public class Launcher1 {
public static void main(String[] args) {
JoinExample runnable=new JoinExample();
Thread thread1=new Thread(runnable);
Thread thread2=new Thread(runnable);
thread1.start();
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
thread2.start();
try {
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class JoinExample implements Runnable{
public void run(){
for(int i=0;i<10;i++){
System.out.println("i:"+i+" "+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
輸出:
i:0線程-0
我:1個線程-0
i:0線程-1
i:2個線程-0
我:1個線程-1
我:3個線程-0
我:4個線程-0
我:2個線程-1
我:3線程-1
我:5個線程-0
我:4線程-1
我:6個線程-0
我:7個線程-0
我:5線程-1
我:8個線程-0
我:6線程-1
我:7線程-1
我:9線程-0
我:8個線程-1
我:9線程-1
但是,在我的程序中,兩個線程同時執行。 Thread1沒有等待Thread2完成執行。
不,它不會 - 因為線程1沒有調用join
。 看看你再次引用的文檔:
對join()的調用保證使當前線程停止執行,直到它加入的線程
換句話說: join()
方法在調用它的線程完成之前不會完成。
你的程序中有三個線程 - 兩個運行JoinExample.run
,以及啟動另外兩個的“main”線程。 你告訴主線程等待線程2完成,但這就是全部。 您的兩個JoinExample
線程完全獨立。
這里有三個問題。 第一個線程 - 主線程,它運行main方法並生成2個子線程。 第二個線程 - thread1
第三個線程 - thread2
當你說thread2.join()
,主線程將阻塞直到thread2
完成, thread1
和thread2
將繼續運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.