从头认识java-18.2 基本的线程机制(7)join
来源:互联网 发布:网络直播主持词 编辑:程序博客网 时间:2024/05/22 02:28
这一章节我们来讨论一下join。
1.什么是join?
堵塞当前线程,让.join的线程先做完,然后再继续当前线程
下面是api的解释:
A.join,在API中的解释是,堵塞当前线程B,直到A执行完毕并死掉,再执行B。
2.例子:
package com.ray.ch17;public class Test {public static void main(String[] args) throws InterruptedException {System.out.println(Thread.currentThread().getName() + " start");SleepThread sleepThread = new SleepThread("sleep");Thread.sleep(2000);JoinThread joinThread = new JoinThread(sleepThread, "join");//joinThread.join();System.out.println(Thread.currentThread().getName() + " end");}}class SleepThread extends Thread {public SleepThread(String name) {super(name);start();}@Overridepublic void run() {try {for (int i = 0; i < 5; i++) {System.out.println(getName() + " SleepThread");Thread.sleep(1000);}} catch (InterruptedException e) {e.printStackTrace();}}}class JoinThread extends Thread {private SleepThread sleepThread;public JoinThread(SleepThread sleepThread, String name) {super(name);this.sleepThread = sleepThread;start();}@Overridepublic void run() {try {System.out.println(getName() + " join start");sleepThread.join();System.out.println(getName() + " join end");} catch (InterruptedException e) {e.printStackTrace();}}}
输出:
main start
sleep SleepThread
sleep SleepThread
sleep SleepThread
main end
join join start
sleep SleepThread
sleep SleepThread
join join end
package com.ray.ch17;public class Test {public static void main(String[] args) throws InterruptedException {System.out.println(Thread.currentThread().getName() + " start");SleepThread sleepThread = new SleepThread("sleep");Thread.sleep(2000);JoinThread joinThread = new JoinThread(sleepThread, "join");joinThread.join();System.out.println(Thread.currentThread().getName() + " end");}}class SleepThread extends Thread {public SleepThread(String name) {super(name);start();}@Overridepublic void run() {try {for (int i = 0; i < 5; i++) {System.out.println(getName() + " SleepThread");Thread.sleep(1000);}} catch (InterruptedException e) {e.printStackTrace();}}}class JoinThread extends Thread {private SleepThread sleepThread;public JoinThread(SleepThread sleepThread, String name) {super(name);this.sleepThread = sleepThread;start();}@Overridepublic void run() {try {System.out.println(getName() + " join start");sleepThread.join();System.out.println(getName() + " join end");} catch (InterruptedException e) {e.printStackTrace();}}}
输出:
main start
sleep SleepThread
sleep SleepThread
sleep SleepThread
join join start
sleep SleepThread
sleep SleepThread
join join end
main end
上面两个代码的不同主要是体现在joinThread.join();是否被注释。
对比上面的两个代码的输出,主要不同在于main end 的位置,当joinThread.join();的时候,由于需要先阻塞main方法的线程,先完成joinThread所在线程,因此main end的位置会出现上面的变化。
另一方面,我们从sleep和join两个线程输出的文字的位置也可以推导出上面的结论。
总结:这一章节我们简单介绍了一下join。
这一章节就到这里,谢谢。
-----------------------------------
目录
0 0
- 从头认识java-18.2 基本的线程机制(7)join
- 从头认识java-18.2 基本的线程机制(5)-守护线程与非守护线程
- 从头认识java-18.2 基本的线程机制(3)-线程的返回与sleep
- 从头认识java-18.2 基本的线程机制(2)-Executors的使用
- 从头认识java-18.2 基本的线程机制(8)多线程的异常捕捉
- 从头认识java-18.2 基本的线程机制(1)-再识多线程-1
- 从头认识java-18.2 基本的线程机制(1)-再识多线程-2
- 从头认识java-18.2 基本的线程机制(4)-优先级
- 从头认识java-18.2 基本的线程机制(6)-使用构造器或者内部类来实现多线程的编码变体
- 从头认识java-17.2 线程中断(interrupt)
- 从头认识java-11.4 正则表达式(2)-基本语法
- 从头认识Spring-2.8 基于java注解的配置(基本没有xml)
- 从头认识java-17.3 线程状态
- java线程的join基本用法
- Java线程的基本机制
- 从头认识java-4.8 数组的初始化(1)
- 从头认识java-10.6 finally(3)-异常的丢失
- 从头认识java-15.2 Collection的常用方法(1)
- 网页判断判断是否安装APP并启动,没有安装就跳转到下载页面
- CSS基础:text-overflow:ellipsis溢出文本的显示样式
- createrepo:创建本地源
- Linux LVM硬盘管理及LVM扩容
- windows下 composer常见问题及处理
- 从头认识java-18.2 基本的线程机制(7)join
- Gradle学习基础(1):搭建Gradle环境
- IIS 无法读取配置节"system.web.extensions",因为它缺少节声明
- java class文件简介
- jquery全选/不选
- 让Spinner更生动
- 【bzoj2154/2693】Crash的数字表格/jzptab 莫比乌斯反演
- postgresql 排它约束
- OC-谓词