Java 为什么Thread.join的行为不符合预期
我不熟悉线程的概念。我做这个测试是为了了解join是如何工作的。假设join使调用线程等待,直到join实例表示的线程终止。我有两个线程t1和t2。首先,t1调用join,然后t2调用join。我希望t1在t2开始之前完成,因为join是从主线程调用的。我希望主线程从调用第一个连接的点开始等待。但事实并非如此。t1、t2和打印“线程”的行开始并行运行。既然假设主线程在等待t1完成,那么它是如何打印和调用t2的呢Java 为什么Thread.join的行为不符合预期,java,multithreading,synchronization,Java,Multithreading,Synchronization,我不熟悉线程的概念。我做这个测试是为了了解join是如何工作的。假设join使调用线程等待,直到join实例表示的线程终止。我有两个线程t1和t2。首先,t1调用join,然后t2调用join。我希望t1在t2开始之前完成,因为join是从主线程调用的。我希望主线程从调用第一个连接的点开始等待。但事实并非如此。t1、t2和打印“线程”的行开始并行运行。既然假设主线程在等待t1完成,那么它是如何打印和调用t2的呢 public static void main(String[] args) thr
public static void main(String[] args) throws InterruptedException, ExecutionException {
Thread t1 = new Thread(new A());
Thread t2 = new Thread (new B());
t1.start();
t2.start();
t1.join();
System.out.println("Thread");
t2.join();
}
您正在以错误的顺序调用
join
。启动t1
,然后调用join
,这样主线程将等待t1
死亡,然后启动t2
public static void main(String args[]) throws InterruptedException{
Thread t1 = new Thread(() -> System.out.println("a"));
Thread t2 = new Thread (() -> System.out.println("b"));
t1.start();
t1.join(); //main waits for t1 to finish
System.out.println("Thread");
t2.start();
t2.join(); //main waits for t2 to finish
}
输出:
a
Thread
b
当您同时启动t1
和t2
并调用t1.join()
时,主线程确实在等待t1
死亡,因此t1
将一直执行到结束,但在后台t2
已经开始执行,因此您会看到两个线程并行运行
public static void main(String args[]) throws InterruptedException{
Thread t1 = new Thread(() -> System.out.println("a"));
Thread t2 = new Thread (() -> System.out.println("b"));
t1.start(); //Started executing
t2.start(); //Started executing
t1.join(); //main thread waiting for t1, but in the background t2 is also executing independently
System.out.println("Thread");
t2.join(); //main again waiting for t2 to die
}
您正在以错误的顺序调用
join
。启动t1
,然后调用join
,这样主线程将等待t1
死亡,然后启动t2
public static void main(String args[]) throws InterruptedException{
Thread t1 = new Thread(() -> System.out.println("a"));
Thread t2 = new Thread (() -> System.out.println("b"));
t1.start();
t1.join(); //main waits for t1 to finish
System.out.println("Thread");
t2.start();
t2.join(); //main waits for t2 to finish
}
输出:
a
Thread
b
当您同时启动t1
和t2
并调用t1.join()
时,主线程确实在等待t1
死亡,因此t1
将一直执行到结束,但在后台t2
已经开始执行,因此您会看到两个线程并行运行
public static void main(String args[]) throws InterruptedException{
Thread t1 = new Thread(() -> System.out.println("a"));
Thread t2 = new Thread (() -> System.out.println("b"));
t1.start(); //Started executing
t2.start(); //Started executing
t1.join(); //main thread waiting for t1, but in the background t2 is also executing independently
System.out.println("Thread");
t2.join(); //main again waiting for t2 to die
}
我希望t1在t2开始之前完成
那么你应该在加入t1
之后开始t2
。我制作这个小程序是为了更好地理解线程的概念,了解join是如何工作的。我希望t1在t2开始之前完成
那么你应该在t2
之后开始您可以加入t1
。我制作这个小程序是为了更好地理解线程的概念,并了解join是如何工作的。