Thread.join无法正常工作

时间:2015-04-26 07:33:33

标签: java multithreading

对join()的调用保证使当前线程在其加入的线程之前停止执行 (换句话说,它调用join()on的线程)完成。

但是,在我的程序中,两个线程同时执行。 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();
            }
        }
    }

}
  
    

输出:

         

i:0 Thread-0

         

i:1个Thread-0

         

i:0 Thread-1

         

i:2 Thread-0

         

i:1 Thread-1

         

i:3 Thread-0

         

i:4 Thread-0

         

i:2 Thread-1

         

i:3 Thread-1

         

i:5 Thread-0

         

i:4 Thread-1

         

i:6 Thread-0

         

i:7 Thread-0

         

i:5 Thread-1

         

i:8 Thread-0

         

i:6 Thread-1

         

i:7 Thread-1

         

i:9 Thread-0

         

i:8 Thread-1

  
     

i:9 Thread-1

2 个答案:

答案 0 :(得分:6)

  

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

不,而且它不会 - 因为第1个帖子没有调用join。看看你再次引用的文档:

  

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

换句话说:join()方法一直没有完成,直到它被调用的主题完成为止。

您的程序中有三个主题 - 两个正在运行JoinExample.run,而#34;主要&#34;启动另外两个的线程。您告诉线程等待线程2完成,但这就是全部。你的两个JoinExample线程是完全独立的。

答案 1 :(得分:1)

这里有三个问题。 第一个线程 - 主线程,它运行main方法并生成2个子线程。 第二个帖子 - thread1 第3个帖子 - thread2 当您说thread2.join()时,主线程将会阻止,直到thread2完成,thread1thread2将继续运行。