加入方法正在等待它不应该等待

时间:2018-01-16 20:00:13

标签: java multithreading

以下是我的代码。在名为Threads的类中,我不了解t1.join()是如何工作的。它应该等到那个线程完成。因此,第一次运行run方法时,它应该启动新线程,然后当前线程应该没有任何等待,它应该只是向下并打印其名称。但是所有线程都在等待,直到最后一个线程完成,然后线程以相反的顺序终止。这是程序应该做的,但我不明白它是如何工作的。我希望我的问题描述得足够好。

主类

public class Project 
{


public static void main(String[] args) throws InterruptedException 
{
    Threads t1 = new Threads(1);
    t1.setName("Thread 1");
    t1.start();
    t1.join();
   System.out.println("First Thread Finished");




    //Thread.sleep(5000);
    //System.out.println(Threads.que.get(5).isAlive());
}

}

线程类

public class Threads extends Thread
{

private int i;

public Threads(int i) 
{        
    this.i = i;
}

@Override
public void run()
{

    i++;
    if(i <= 6)
    {
        Threads t = new Threads(i);
        t.setName("Thread " + i);
        t.start();  
        try {
            t.join();
        } catch (InterruptedException ex) {

        }
        System.out.println(getName());
    }


}

}

1 个答案:

答案 0 :(得分:2)

以下是正在发生的事情(表现得像递归调用):

1)主线程创建Thread1并等待它完成。

2)Thread1创建Thread2并等待它完成。

3)Thread2创建Thread3并等待它完成。

4)Thread3创建Thread4并等待它完成。

5)Thread4创建Thread5并等待它完成。

6)Thread5创建Thread6并等待它完成。

7)Thread6不打印任何内容并完成(因为它没有输入if语句)。

8)然后Thread5来自join电话,打印&#34;线程5&#34;并完成。

9)然后Thread4来自join来电,打印&#34; Thread4&#34;并完成。

10)然后Thread3来自join电话,打印&#34;线程3&#34;并完成。

11)然后Thread2来自join电话,打印&#34;线程2&#34;并完成。

12)然后Thread1来自join电话,打印&#34;线程1&#34;并完成。

13)最后主线程来自join调用并打印&#34; First Thread Finished&#34;。