Java Thread.join不工作

Java Thread.join不工作,java,multithreading,Java,Multithreading,对join()的调用保证会导致当前线程停止执行,直到与之连接的线程停止为止 (换句话说,它调用join()的线程)完成 但是,在我的程序中,两个线程同时执行。Thread1没有等待Thread2完成其执行。 我的程序有什么问题? public class Launcher1 { public static void main(String[] args) { JoinExample runnable=new JoinExample(); Thread

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

}
公共类启动器1{
公共静态void main(字符串[]args){
JoinExample runnable=新的JoinExample();
线程线程1=新线程(可运行);
螺纹2=新螺纹(可运行);
thread1.start();
试一试{
《睡眠》(2000年);
}捕捉(中断异常e1){
e1.printStackTrace();
}
thread2.start();
试一试{
螺纹2.连接();
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
公共类JoinExample实现了Runnable{
公开募捐{
对于(int i=0;i
然而,在我的程序中,两个线程同时执行。Thread1并没有等待Thread2完成它的执行

不,也不会-因为线程1没有调用
join
。请再次查看您引用的文档:

对join()的调用保证会导致当前线程停止执行,直到与之连接的线程停止执行

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


您的程序中有三个线程—两个线程正在运行
JoinExample.run
,另一个“主”线程启动另外两个线程。您告诉该主线程等待线程2完成,但仅此而已。您的两个
JoinExample
线程是完全独立的。

这里讨论了三个线程。 第一个线程-主线程,它运行main方法并生成两个子线程。 第二个线程-
thread1
第三个线程-
thread2

当您说
thread2.join()
时,主线程将阻塞,直到
thread2
完成,
thread1
thread2
将继续运行。

谢谢,我很感激!!