我正在学习如何在多线程中使用join()。我对以下程序有疑问。
当main方法首次调用t1.join()时,是否将主线程和t2线程都等待,或者它只是等待的主线程?
public class App {
private int count = 0;
public void increment(){
count++;
}
public static void main(String[] args) {
App app=new App();
app.dowork();
}
public void dowork() {
Thread t1 = new Thread(new Runnable(){
public void run(){
for(int i=0;i<10000;i++){
increment();
}
}
});
Thread t2=new Thread(new Runnable(){
public void run(){
for(int i=0;i<10000;i++){
increment();
}
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("count is " + count);
}
}
答案 0 :(得分:1)
这里只有你的主线程将暂停,直到t1
线程结束。之后,主线程也会等到t2
完成。
答案 1 :(得分:1)
你应该读一下。 Jenkov's multithreading walkthrough详细解释了多线程,而不会给你带来过多的信息。回答;你导致主线程等到第一个线程完成,然后等待第二个线程完成。但如果仔细观察,请考虑以下事项:
你有3个线程,主线程,线程1和线程2.主线程启动另外两个线程然后等待线程1.但是线程1和线程2都被允许继续,只有主线程将等待线程1完成。如果线程2在完成线程1后仍然存活,则主线程将等待线程2。
答案 2 :(得分:1)
当你t1.join()
主线程阻塞并等待线程t1
完成时。线程t2
不受影响。一旦t1
完成,主线程将恢复,然后执行t2.join()
,等待t2
完成。
答案 3 :(得分:0)
t1.join()使调用线程(可能在本例中为main)等待t1。同样适用于t2.join()