JUC学习-12-线程合并
JUC学习-12-线程合并
子线程执行join方法后,主线程会等待子线程执行完毕结束以后 再去继续执行主线程的代码
class JoinThread {
static int value = 1;
public static void main(String[] args) {
Thread t = new Thread(() -> {
value = 10;
System.out.println("线程Runnable");
});
// 异步
t.start();
System.out.println("主线程: " + value);
}
}
结果如下图所示:
因为在启动主线程的时候,不会等待子线程执行完成以后再去执行。所以执行完start()方法以后会立即执行下面的System.out代码(异步执行),打印出来的结果的value的值是“1”
让主线程睡眠
class JoinThread {
static int value = 1;
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
value = 10;
System.out.println("线程Runnable");
});
t.start();
// 主线程睡眠
Thread.sleep(1000);
System.out.println("主线程: " + value);
}
}
结果如下图所示:
主线程在睡眠的时候,子线程已经进行完打印和赋值操作。此时打印出来的值是“10”
利用join方法
class JoinThread {
static int value = 1;
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
value = 10;
System.out.println("线程Runnable");
});
t.start();
// 使用join方法
t.join();
System.out.println("主线程: " + value);
}
}
结果如下图所示:
主线程会等待子线程执行完毕以后再去执行(注:join可以设置主线程的等待时间 参数)
本文来自博客园,作者:skystrivegao,转载请注明原文链接:https://www.cnblogs.com/skystrive/p/18972311
整理不易,如果对您有所帮助 请点赞收藏,谢谢~