java Join()方法查询
我正在学习如何在多线程中使用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);
}
}
# 1 楼答案
这里只有主线程将被挂起,直到
t1
线程完成。在此之后,主线程也将等待t2
完成# 2 楼答案
当您
t1.join()
时,主线程阻塞并等待线程t1
完成。线程t2
不受影响。一旦t1
完成,主线程将恢复,然后执行t2.join()
,等待t2
完成# 3 楼答案
t1。join()导致调用线程(在本例中可能是main)等待t1。t2也是如此。加入
# 4 楼答案
你应该读一读Jenkov's multithreading walkthrough详细解释了多线程,而不会使您的信息过载。回答;使主线程等待第一个线程完成,然后等待第二个线程完成。但如果仔细观察,可以考虑以下内容:
您有3个线程,主线程、线程1和线程2。主线程启动另外两个线程,然后等待线程1。但是,线程1和线程2都可以继续,只有主线程将等待线程1完成。如果线程1完成后线程2仍处于活动状态,则主线程将等待线程2