Thread.join无法正常工作

Joh*_*mbo 2 java multithreading

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

}
Run Code Online (Sandbox Code Playgroud)

输出:

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

Jon*_*eet 7

但是,在我的程序中,两个线程同时执行.Thread1没有等待Thread2完成执行.

不,它不会 - 因为线程1没有调用join.看看你再次引用的文档:

对join()的调用保证使当前线程停止执行,直到它加入的线程

换句话说:在join()调用它的线程完成之前,该方法不会完成.

你的程序中有三个线程 - 两个正在运行的JoinExample.run线程,以及启动另外两个线程的"主"线程.你告诉线程等待线程2完成,但这就是全部.你的两个JoinExample线程是完全独立的.