Thread类的join()方法
public class Demo { /**
* Thread类的join()方法
* --------------------------------
* 1)join()
* 2)join(long millis)
* 3)join(long millis, int nanos)
* 用法见代码中注释,可通过调整睡眠时间一一验证。
*/
public static void main(String[] args) { // 创建一个线程组
ThreadGroup threadGroup = new ThreadGroup("ThreadGroup1"); // 在该线程组下创建一个线程t1
Thread t1 = new Thread(threadGroup, new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000); // 3秒后执行
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread1 end ...");
}
}, "Thread1"); // 在该线程组下创建一个线程t2
Thread t2 = new Thread(threadGroup, new Runnable() {
@Override
public void run() {
try {
/*
* t1.join();
* ----------------------------
* 等同于 t1.join(0); t1执行结束后执行t2.
*/
t1.join(); /*
* t1.join(1000);
* ----------------------------
* 等最多1s直至t1死亡。
* |- 如果1s内t1没死,t1执行1s后开始执行t2;
* |- 如果1s内t1死了,不用等满1s直接开始执行t2;
*/
// t1.join(1000); /*
* t1.join(1000, 1000);
* -----------------------------------------
* 类似t1.join(1000);
* 第一个1000,单位是毫秒,第二个1000单位是纳秒 .
* |- 如果第一个参数不是1000,而是0,效果等同 t1.join(0 + 1);
* |- 如果第二个参数大于50万,效果等同 t1.join(1000 + 1);
* |- 如果第一个参数不为0,第二个参数小于50万,效果等同 t1.join(1000);
* 有点延时执行的意思。但是延时的时间只能是0毫秒或1毫秒。
*/
// t1.join(1000, 1000); Thread.sleep(1000); // 1s后执行
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread2 end ...");
}
}, "Thread2"); // 启动线程
t1.start();
t2.start();
}
}
Thread类的join()方法的更多相关文章
- 多线程:Thread类的Join()方法
多线程:Thread类的Join()方法 http://blog.163.com/hc_ranxu/blog/static/3672318220095284513678/ 当我们在线程B中调用Thre ...
- C#中Thread类中Join方法的理解(转载)
指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行 比如 using System; namespace TestThreadJoin { class Pro ...
- Java中Thread类的join方法到底是如何实现等待
现在的场景是A线程执行:public void run(){ bThread.join(0);//把b线程加入到当前线程(a线程),等待b结束,当前a线程才会结束.}B线程执行public void ...
- 【java基础】Thread类之join方法
- python语言中threading.Thread类的使用方法
1. 编程语言里面的任务和线程是很重要的一个功能.在python里面,线程的创建有两种方式,其一使用Thread类创建 # 导入Python标准库中的Thread模块 from threading i ...
- python 全栈开发,Day42(Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures)
昨日内容回顾 线程什么是线程?线程是cpu调度的最小单位进程是资源分配的最小单位 进程和线程是什么关系? 线程是在进程中的 一个执行单位 多进程 本质上开启的这个进程里就有一个线程 多线程 单纯的在当 ...
- python全栈开发,Day42(Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures)
昨日内容回顾 线程 什么是线程? 线程是cpu调度的最小单位 进程是资源分配的最小单位 进程和线程是什么关系? 线程是在进程中的一个执行单位 多进程 本质上开启的这个进程里就有一个线程 多线程 单纯的 ...
- 多线程学习笔记(四)---- Thread类的其他方法介绍
一.wait和 sleep的区别 wait可以指定时间也可以不指定时间,而sleep必须指定时间: 在同步中时,对cpu的执行权和锁的处理不同: wait:释放执行权,释放锁:释放锁是为了别人noti ...
- Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? 线程的sleep()方法和yield()方法有什么区别?
Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别? sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间 ...
随机推荐
- jQueryUI中Datepicker(日历)插件使用
atepicker插件的属性: 属性 数据类型 默认值 说明 altField string "" 使用备用的输出字段,即将选择的日期 以另一种格式,输出到另一个控件中, 值为选择 ...
- js 操作数组
数组的增删 数组的尾部插入一个元素 var nums = [0,1,2,3,4]; nums.push(5,6,6); //[0,1,2,3,4,5,6,6] 删除数组尾部的元素 var nums = ...
- Maven实战(七)——常用Maven插件介绍(上)
我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的.进一步说,每个任务对应了 ...
- react-native 报错 RawText "" must be wrapped in an explicit <Text> component
刚才又遇到了一个坑,找了好久,问题如下: 开始以为是Text标签怎么有问题了,结果是下面的原因影响的: 上图第二行,标签和注释中间多了一个空格,就会报这个错误. 解决办法 1.将空格删掉 <Re ...
- mac 本地跨域
完全退出chrome后终端下输入以下命令: chrome49以前版本 open -a "Google Chrome" --args --disable-web-security c ...
- db2 执行报错收集
1.对于执行中的报错,可以在db2命令行下运行命令 : db2=>? SQLxxx 查看对应的报错原因及解决方法. 2.错误SQL0206N SQLSTATE=42703 检测到一个未定义的列 ...
- JSP(8)—EL案例和JSTL案例
1.EL案例 el.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- pygame-KidsCanCode系列jumpy-part12-platform图片
目前为止,Player的站立.行走.跳跃都是动画了,只有跳板(即:Platform类)还是难看的矩形,这节我们把Platform也换成图片: 原来的Platform类长这个样子: class Plat ...
- SpringBoot无废话入门02:SpringBoot启动分析
1.核心注解 在上文中,我们讲到了@SpringBootApplication是SpringBoot的核心注解. 可以很方便的在idea中下载源码来查看该注解的源码,如下: 可以看到,该注解本身又被其 ...
- 使用log4net生成日志文件
(一)使用log4net生成日志文件 1.引入log4net.dll 1.1 Nuget安装 或 http://logging.apache.org/log4net/下载log4net的源代码,编 ...