线程中的join
现创建两个线程thread1和thread2,thread1运行时间短,thread2运行时间长,代码如下:
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(() -> {//运行时间短
for (int i = 0; i < 3; i++) {
System.out.println("Thread1");
try {
sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
Thread thread2 = new Thread(() -> {//运行时间长
for (int i = 0; i < 3; i++) {
System.out.println("Thread2");
try {
sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
thread1.start();
thread2.start();
for (int i = 0; i < 3; i++) {
System.out.println("main");
sleep(1000);
}
}
现有如下join顺序:
1.
thread1.join();
会使main线程阻塞,thread1与thread2同时运行,由于thread1运行时间短,则thread1会先结束,结束后thread2与main同时运行。
2.
thread2.join();
会使mian线程阻塞,thread1与thread2同时运行,thread1结束后,thread2依然在运行,thread2结束后main才会运行。
3.
thread1.join();
thread2.join();
mian线程被阻塞,thread1与thread2先运行,thread1结束后thread2依然在运行,thread2结束后mian才运行。
4.
thread2.join();
thread1.join();
main线程被阻塞,thread1与thread2先运行,由于thread1先于thread2结束,则thread2结束后“thread1.join()”是无效语句,mian接着运行。
以上3,4的写法与2是等价的
原文地址:https://blog.csdn.net/2301_79184547/article/details/142865706
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!