Java join()不';t堵塞其他螺纹(主螺纹除外)?

Java join()不';t堵塞其他螺纹(主螺纹除外)?,java,multithreading,Java,Multithreading,我们的老师给了我们以下代码: public static void main(String[]args) { Thread a = new Thread(new T(2)); Thread b = new Thread(new T(5)); a.start(); b.start(); try { a.join(); //Thread a now runs completely to the end, before the main-method gets back to a "runnabl

我们的老师给了我们以下代码:

public static void main(String[]args) {
Thread a = new Thread(new T(2));
Thread b = new Thread(new T(5));

a.start();
b.start();

try {
a.join(); //Thread a now runs completely to the end, before the main-method gets back to a "runnable" state

    b.join(); //Thread b runs to death before the main methods u
    } catch (InterruptedException ie) {}

    System.out.println("done");  //Result: Random Thread a and b outputs
                                 //and in the end "done" from main
    }

public class T extends Thread {
private int nr;
public T(int nr) {
this.nr = nr;
}

public void run() {
for (int i=0; i<10; i++) {
System.out.println("Hello " + nr + " " + i);
}
}
publicstaticvoidmain(字符串[]args){
螺纹a=新螺纹(新T(2));
螺纹b=新螺纹(新T(5));
a、 start();
b、 start();
试一试{
a、 join();//线程a现在在主方法返回到“runnable”状态之前完全运行到底
b、 join();//线程b在主方法u之前运行到死亡状态
}捕获(中断异常)
System.out.println(“完成”);//结果:随机线程a和b输出
//最后从main“完成”
}
公共类T扩展线程{
私人国际天然气公司;
公共交通(国际北){
这个。nr=nr;
}
公开募捐{
对于(int i=0;i对
Thread
实例的
join()
调用将在对应于该实例的线程死亡之前完成

Corrollary 1:如果该线程已经死了,
join()
会立即返回

Corrollary 2:除当前线程外,没有线程受此调用影响

他还说,这是完全随机的,由调度程序管理

你可能没有完全听懂老师在这里说的话。线程调度,也就是说,决定何时给线程一些CPU时间来运行,以及有多少CPU时间,是由线程调度程序完成的。它绝对不是“完全随机的”出于最实际的考虑,所有线程都会一直运行。同样,这与
join
方法的行为没有多大关系。

Thread
的实例调用
join()
将在该实例对应的线程死亡之前完成

Corrollary 1:如果该线程已经死了,
join()
会立即返回

Corrollary 2:除当前线程外,没有线程受此调用影响

他还说,这是完全随机的,由调度程序管理

你可能没有完全听懂老师在这里说的话。线程调度,也就是说,决定何时给线程一些CPU时间来运行,以及有多少CPU时间,是由线程调度程序完成的。它绝对不是“完全随机的”出于最实际的考虑,所有线程都会一直运行。同样,这与
join
方法的行为没有多大关系。

Thread
的实例调用
join()
将在该实例对应的线程死亡之前完成

Corrollary 1:如果该线程已经死了,
join()
会立即返回

Corrollary 2:除当前线程外,没有线程受此调用影响

他还说,这是完全随机的,由调度程序管理

你可能没有完全听懂老师在这里说的话。线程调度,也就是说,决定何时给线程一些CPU时间来运行,以及有多少CPU时间,是由线程调度程序完成的。它绝对不是“完全随机的”出于最实际的考虑,所有线程都会一直运行。同样,这与
join
方法的行为没有多大关系。

Thread
的实例调用
join()
将在该实例对应的线程死亡之前完成

Corrollary 1:如果该线程已经死了,
join()
会立即返回

Corrollary 2:除当前线程外,没有线程受此调用影响

他还说,这是完全随机的,由调度程序管理


你可能没有完全听懂老师在这里说的话。线程调度,也就是说,决定何时给线程一些CPU时间来运行,以及有多少CPU时间,是由线程调度程序完成的。它绝对不是“完全随机的”出于最实际的考虑,所有线程都会一直运行。同样,这与
join
方法的行为没有多大关系。

join
的要点不是赋予单个线程高于所有其他线程的优先级。相反,它表示一个线程需要等待另一个线程在此之前完成(首先)线程可以继续。它并不总是主线程调用
join
。它是对调度程序的一个约束:“在完成B之前不要执行a”当然,通过使用多个
join
s,您可以完成更复杂的依赖关系。

join的要点不是赋予单个线程高于所有其他线程的优先级。而是表示一个线程需要等待另一个线程完成(首先)线程可以继续。它并不总是主线程调用
join
。它是对调度程序的一个约束:“在完成B之前不要执行a”当然,通过使用多个
join
s,您可以完成更复杂的依赖关系。

join的要点不是赋予单个线程高于所有其他线程的优先级。而是表示一个线程需要等待另一个线程完成(首先)线程可以继续。它并不总是主线程调用
join
。它是对调度程序的一个约束:“在完成B之前不要执行a”当然,通过使用多个
join
s,您可以完成更复杂的依赖关系。

join的要点不是赋予单个线程高于所有其他线程的优先级。而是表示一个线程需要等待另一个线程完成(首先)线程可以继续。它并不总是主线程调用
join
。它是对调度程序的一个约束:“在完成B之前不要执行a”当然,通过使用多个
join
s,您可以完成更复杂的依赖关系。

我怀疑您的老师想表达的观点是除了
join
的契约之外,您不能假定任何东西。也就是说,主线程将不会继续,直到<