从头认识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 ...
随机推荐
- php将session保存到数据库的类实例(php版本需要大于5.4)
这里实现了一个把session存储到数据库的类,包括数据表的创建.类的使用.php的配置. 可以更好地进行用户控制管理. 做项目的时候,有一个需求,是要实现禁止一个账号两处登录.同时要统计当前在线用户 ...
- redis 只允许指定的额内网IP访问,其余的外网IP不允许访问
为了redis的安全,现在设定如下规则.只允许指定的服务器通过内网的方式访问.其余一律不准访问 因为redis登录额时候是不需要密码的,很不安全. 所以这里添加如下iptables规则 iptable ...
- AngularJS 使用 UI Router 实现表单向导
Today we will be using AngularJS and the great UI Router and the Angular ngAnimate module to create ...
- IIS启用GZip压缩的详细教程(图文)
本文将详细介绍如何在IIS启用GZip压缩,同时解决可能遇到的一些问题 IIS启用GZip压缩,是提高网站速度和减轻服务器负载的一个优化手段和方法,经测试,网站启用GZip压缩后,速度快了3倍!而配置 ...
- cocos2d-x开发记录:一,搭建环境
首先我下载的cocos2D版本为2.1.2版本,我们安装好VS后,新建一个解决方案,这里很重要,假设我的cocos解压后的路径为E:\cocos2d-2.1rc0-x-2.1.2-hotfix\coc ...
- 【Android】7.0 第7章 简单适配器和布局--本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-09 修改日期:2016-02-13 一.在AssemblyInfo.cs文件中配置应用程序清单 前面的章节我们说过,除了在And ...
- 428. Pow(x, n)【medium】
Implement pow(x, n). Notice You don't need to care about the precision of your answer, it's acceptab ...
- Python 2.7.9 Demo - 001.print_hello_world - 002.print_chinese
001.print_hello_world #!/usr/bin/python print "hello, world..."; 002.print_chinese #coding ...
- xslt转换xml
实现json--> xml --(xlst)--> xml pom依赖 <dependency> <groupId>net.sf.json-lib</grou ...
- Redis之Python操作
Redis简单介绍 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构 ...