以下是我的代码。在名为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());
}
}
}
答案 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;。