从头认识java-18.2 主要的线程机制(7)join
这一章节我们来讨论一下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();
	}
	@Override
	public 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();
	}
	@Override
	public 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();
	}
	@Override
	public 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();
	}
	@Override
	public 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。
这一章节就到这里,谢谢。
-----------------------------------
从头认识java-18.2 主要的线程机制(7)join的更多相关文章
- Java多线程(十)线程间通信 join
		若果主线程想等待子线程执行完成之后再结束,可以用join方法 join 和sleep区别 join内部有wait实现,所以当执行join方法后,当前线程的锁被释放,那么其他线程就可以调用此线程的同步方 ... 
- Java多线程学习(四)---控制线程
		控制线程 摘要: Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程的执行 1. join线程控制,让一个线程等待另一个线程完成的方法 2. 后台线程,又称为守护线程 ... 
- java多线程系列六、线程池
		一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池. 2. 使用线程池的好处 a) 降低资源的消耗.使用线程池不用频繁的创建线程和销毁线程 b) 提高响应速度,任 ... 
- java多线程面试题_线程并发面试题
		1.什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个 ... 
- Java(279-298)【异常、线程】
		1.异常的概念&异常的体系 异常,就是不正常的意思.在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将 受影响.在程序中的意思就是: 异常 :指的是程序在执行过 ... 
- Java中的进程和线程
		Java中的进程与线程 一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是 ... 
- Java中的进程与线程(总结篇)
		详细文档: Java中的进程与线程.rar 474KB 1/7/2017 6:21:15 PM 概述: 几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进 ... 
- 0036 Java学习笔记-多线程-创建线程的三种方式
		创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ... 
- Java学习笔记-多线程-创建线程的方式
		创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ... 
- java查看当前项目所有线程列表界面
		java查看当前项目所有线程列表界面 1.TestThread(测试类) package com.isoftstone.pcis.isc.job.king.panel; public class Te ... 
随机推荐
- python中杂乱问题
			1 字符串格式化中的格式指定 format_spec ::= [[fill]align][sign][#][][width][,][.precision][type] fill ::= <any ... 
- php序列化与反序列化时字符集不一致问题的解决办法
			今天的用PHP的时候无意的出现了用unserialize()函数转换老是返回false,我确认我的字符串是没错的,测试了很多次还是一样,没办法,启用了error_reporting(E_ALL)启用错 ... 
- How to install Mysql in the CentOS
			This article will walk through you the process of installing and updating latest MySQL 5.7.9 version ... 
- JS格式化数字保留两位小数点示例代码
			格式化数字保留两位小数点实现的方法有很多,在接下来的文章中将为大家详细介绍下如何使用js来实现 a = a.toFixed(2);//保留2位但结果为一个String类型 a = parseFloat ... 
- leetcode ---双指针+滑动窗体
			一:Minimum Size Subarray Sum(最小长度子数组的和O(N)) 题目: Given an array of n positive integers and a positive ... 
- C++学习笔记16,C++11中的显式的默认构造函数以及显示删除默认构造函数
			在早期的C++中.假设须要一些接受一些參数的构造函数,同一时候须要一个不接收不论什么參数的默认构造函数.就必须显示地编写空的默认构造函数.比如: //tc.h class A{ private: in ... 
- python学习之pyc,pyo,pyd文件
			pyc:二进制文件,python文件经过编译器编译之后的文件.可以提高文件加载速度. pyo:二进制文件,优化编译后的文件.可以通过`python -O file.py`生成. pyd:python的 ... 
- 让一个div始终固定在页面的某一固定位置的方法
			方法一:直接用position:fixed 方法二:写一个滚动条滚动事件,让这个div设置 position:absolute 该top的距离等于滚动的距离scrollTop() 写法如下:$(win ... 
- pyqt重写键盘事件+获取信号发送对象
			# _*_ coding:utf-8 _*_ import sys from PyQt4 import QtGui,QtCore class Example(QtGui.QMainWindow): d ... 
- 纯css3实现的文字亮光特效
			今天给大家分享一款纯css3实现的文字亮光特效.这款特效文字上一道亮光逐渐扫过文字.效果非常漂亮.一起看下效果: 在线预览 源码下载 实现的代码. html代码: <span class=& ... 
