Thread.join详解
/**
* 如果某个线程在另一个线程t上调用t.join;那么此线程将被挂起,直到目标t线程的结束才恢复即t.isAlive返回为假
*
* @date:2018年6月27日
* @author:zhangfs
*
*
*/
public class ClientDemo { public static void main(String[] args) {
SleepThread sleepThread1 = new SleepThread("sleepThread1", 1500),
sleepThread2 = new SleepThread("sleepThread2", 1500); JoinThread joinThread1 = new JoinThread("joinThread1", sleepThread1),
joinThread2 = new JoinThread("joinThread2", sleepThread2); sleepThread2.interrupt(); }
}
p.p1 { margin: 0; font: 11px Monaco }
p.p2 { margin: 0; font: 11px Monaco; color: rgba(147, 26, 104, 1) }
p.p3 { margin: 0; font: 11px Monaco; min-height: 15px }
p.p4 { margin: 0; font: 11px Monaco; color: rgba(126, 80, 79, 1) }
p.p5 { margin: 0; font: 11px Monaco; color: rgba(119, 119, 119, 1) }
p.p6 { margin: 0; font: 11px Monaco; color: rgba(78, 144, 114, 1) }
span.s1 { color: rgba(147, 26, 104, 1) }
span.s2 { color: rgba(0, 0, 0, 1) }
span.s3 { color: rgba(3, 38, 204, 1) }
span.s4 { color: rgba(126, 80, 79, 1) }
span.s5 { color: rgba(145, 175, 203, 1) }
span.s6 { color: rgba(57, 51, 255, 1) }
span.Apple-tab-span { white-space: pre }
public class SleepThread extends Thread {
private int duration;
public SleepThread(String name, int sleepTime) {
super(name);
this.duration = sleepTime;
start();
}
@Override
public void run() {
// TODO Auto-generated method stub
// super.run();
try {
sleep(duration);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.out.println(getName() + " was interrupted. is interrupted is :" + isInterrupted());
return;
}
System.out.println(getName() + " has awakened");
}
}
p.p1 { margin: 0; font: 11px Monaco }
p.p2 { margin: 0; font: 11px Monaco; min-height: 15px }
p.p3 { margin: 0; font: 11px Monaco; color: rgba(3, 38, 204, 1) }
p.p4 { margin: 0; font: 11px Monaco; color: rgba(119, 119, 119, 1) }
p.p5 { margin: 0; font: 11px Monaco; color: rgba(78, 144, 114, 1) }
span.s1 { color: rgba(147, 26, 104, 1) }
span.s2 { color: rgba(3, 38, 204, 1) }
span.s3 { color: rgba(126, 80, 79, 1) }
span.s4 { color: rgba(0, 0, 0, 1) }
span.s5 { color: rgba(145, 175, 203, 1) }
span.s6 { color: rgba(57, 51, 255, 1) }
span.Apple-tab-span { white-space: pre }
public class JoinThread extends Thread {
private SleepThread sleepThread;
public JoinThread(String name, SleepThread sleepThread) {
super(name);
this.sleepThread = sleepThread;
start();
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
sleepThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.out.println("interrupted ");
}
System.out.println(getName() + " Join Complete");
}
}
output:
p.p1 { margin: 0; font: 11px Monaco }
sleepThread2 was interrupted. is interrupted is :false
joinThread2 Join Complete
sleepThread1 has awakened
joinThread1 Join Complete
Thread.join详解的更多相关文章
- 【转】Java Thread.join()详解
http://www.open-open.com/lib/view/open1371741636171.html 一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: ? 1 ...
- Java Thread.join()详解(转)
(1)join方法是可以中断的(2)在线程joiner在另一个线程t上调用t.join(),线程joiner将被挂起,直到线程t结束(即t.isAlive()返回为false)才恢复 package ...
- Java Thread.join()详解--父线程等待子线程结束后再结束
目录(?)[+] 阅读目录 一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法 join是Th ...
- Java Thread.join()详解
一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法 一.使用方式. join是Thread类的 ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- java.lang.Thread类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
- thread 类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
- Java线程创建形式 Thread构造详解 多线程中篇(五)
Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...
- Thread.setDaemon详解
Thread.setDaemon详解 线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护 ...
随机推荐
- C#9.0新特性之四:顶级程序语句(Top-Level Programs)
1 背景与动机 通常,如果只想用C#在控制台上打印一行"Hello World!",这可不是Console.WriteLine("Hello World!"); ...
- SLR(1)语法分析(JAVA实现)
要求 代码 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util. ...
- Linux 服务分类
一,服务分类 1,服务简介与分类 1,服务的分类 启动与自启动 1,服务启动:就是在当前系统中让服务运行,并提供功能 2,服务自启动:自启动是指让服务在系统开机或重启动之后,随着系统的启动而自动启动的 ...
- Android10_原理机制系列_事件传递机制
前言和概述 Android的输入设备,最常用的就是 触摸屏和按键 了.当然还有其他方式,比如游戏手柄,比如支持OTG设备,则可以链接鼠标.键盘等. 那么这些设备的操作 是如何传递到系统 并 控制界面的 ...
- es6语法糖
ES6为一些已有的功能提供了非破坏性更新,这类新语法能做的事情其实用ES5也可以做,只是会稍微复杂一些,称之为语法糖. 对象属性的简洁表示法 声明的对象中包含若干属性,其属性值由变量表示,且变量名和属 ...
- 大白话详解大数据hive知识点,老刘真的很用心(1)
前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的知识点详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 01 hive知识点(1) 第1点:数据仓库的概念 由于hive它是基于had ...
- 【学习笔记】动态 dp 入门简易教程
序列 dp 引入:最大子段和 给定一个数列 \(a_1, a_2, \cdots, a_n\)(可能为负),求 \(\max\limits_{1\le l\le r\le n}\left\{\sum_ ...
- 【JSOI2019】精准预测(2-SAT & bitset)
Description 现有一台预测机,可以预测当前 \(n\) 个人在 \(T\) 个时刻内的生死关系.关系有两种: \(\texttt{0 t x y}\):如果 \(t\) 时刻 \(x\) 死 ...
- stringbuilder和stringbuffer速度比较
同样的代码,只改了类型,分别为stringbuilder和stringbuffer,只比较一下,执行引擎为hive. 当数据量为100000条,string builder耗时280秒,stringb ...
- Ajax相关基础知识总结
URL:统一资源定位符 网络的七层协议:网卡 驱动 网络层(ip) 传输层(tcp udp) 会话层( ) 应用层(http.) restful表征状态转移(一种表征架构) CURD 增删改查 ...