有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);
    }
}

共 (4) 个答案

  1. # 1 楼答案

    这里只有主线程将被挂起,直到t1线程完成。在此之后,主线程也将等待t2完成

  2. # 2 楼答案

    当您t1.join()时,主线程阻塞并等待线程t1完成。线程t2不受影响。一旦t1完成,主线程将恢复,然后执行t2.join(),等待t2完成

  3. # 3 楼答案

    t1。join()导致调用线程(在本例中可能是main)等待t1。t2也是如此。加入

  4. # 4 楼答案

    你应该读一读Jenkov's multithreading walkthrough详细解释了多线程,而不会使您的信息过载。回答;使主线程等待第一个线程完成,然后等待第二个线程完成。但如果仔细观察,可以考虑以下内容:

    您有3个线程,主线程、线程1和线程2。主线程启动另外两个线程,然后等待线程1。但是,线程1和线程2都可以继续,只有主线程将等待线程1完成。如果线程1完成后线程2仍处于活动状态,则主线程将等待线程2