Join()方法查询

时间:2015-09-01 23:17:08

标签: java multithreading

我正在学习如何在多线程中使用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);
    }
}

4 个答案:

答案 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()