join方法使用详解,如何使用join方法?
文章目录
- 一、join方法
- 1.例一
- 2.例二
一、join方法
执行该方法的线程进入阻塞状态,直到调用该方法的线程结束后再由阻塞转为就绪状态
1.例一
import java.util.Date;class TimeThread extends Thread{@Overridepublic void run() {//计数器线程进入阻塞状态后,时间线程获得了CPU的使用权,进入运行状态for(int i=0;i<=2; i++){System.out.println("时间线程:"+new Date());//等时间线程结束以后,计数器线程才重新进入就绪状态,获得CPU的使用权,进入运行状态try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}class CounterThread extends Thread {private TimeThread timeThread;public CounterThread(TimeThread timeThread){this.timeThread = timeThread;}//计数器线程抢占到CPU的资源,优先进入运行状态@Overridepublic void run() {for(int i=1;i<=3; i++){if(i==2){try {//执行join方法的线程进入阻塞状态,调用join方法的线程进入就绪状态timeThread.join();//计数器线程进入阻塞状态,时间线程进入就绪状态} catch (InterruptedException e) {System.out.println("计数器线程提前结束阻塞状态");}}System.out.println("计数器线程:"+i);//先抢占到CPU输出计数器线程:1}}
}public class Program {public static void main(String[] args) {//主线程TimeThread timeThread = new TimeThread();//创建timeThread线程timeThread.start();//timeThread线程就绪CounterThread counterThread = new CounterThread(timeThread);//创建counterThread线程counterThread.start();//counterThread线程就绪}
}
执行结果
①该代码执行结果为计数器线程先获得CPU的使用权
②假如时间线程先获得CPU的使用权
③则时间线程输出一次时间后,时间线程进入阻塞状态
④这时计数器线程获得CPU的使用权,从就绪状态变为运行状态
⑤计数器线程输出一次后,i=2进入if语句
⑥时间线程调用join方法,计数器线程阻塞
⑦时间线程进入就绪状态获得CPU的使用权进入运行状态
⑧等到时间线程运行结束
⑨计数器线程重新获得CPU的使用权结束阻塞状态运行输出
2.例二
只有处于就绪状态的线程才能调用join方法
import java.util.Date;class TimeThread extends Thread{@Overridepublic void run() {for(int i=0;i<=2; i++){System.out.println("时间线程:"+new Date());try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
}class CounterThread extends Thread {//计数器线程抢占到CPU的资源,优先进入运行状态@Overridepublic void run() {for(int i=1;i<=3; i++){if(i==2){try {new TimeThread().join();} catch (InterruptedException e) {e.printStackTrace();}//由于时间线程只处于新建状态,没有调用start方法处于就绪状态,故调用了join方法也没有效果}System.out.println("计数器线程:"+i);//先抢占到CPU输出计数器线程:1}}
}public class Program {public static void main(String[] args) {//主线程CounterThread counterThread = new CounterThread();//创建counterThread线程counterThread.start();//counterThread线程就绪}
}
执行结果
join方法使用详解,如何使用join方法?相关推荐
- Mysql 优化器内部JOIN算法hash join Nestloopjoin及classic hash join CHJ过程详解
Mysql hash join之classic hash join CHJ过程详解 hash join的历史 优化器里的hash join算法在SQL Server.Oracle.postgress等 ...
- python expandtabs_详解Python中expandtabs()方法的使用
详解Python中expandtabs()方法的使用 expandtabs()方法返回制表符,即该字符串的一个副本. '\t'已经使用的空间,可选择使用给定的tabsize(默认8)扩展. 语法 以下 ...
- java 拦截器顺序_Springmvc拦截器执行顺序及各方法作用详解
实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInt ...
- go语言字符串换行_Go语言中的字符串处理方法示例详解
1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号(" ...
- BAT 都在用的方法,详解 A/B 测试的那些坑!
作者|蚂蚁金服人工智能部产品经理 范磊 本文首发|微信公众号 友盟数据服务 (ID:umengcom),转载请注明出处 If you are not running experiments,you a ...
- 数据训练营|BAT都在用的方法,详解A/B测试的那些坑!
作者|蚂蚁金服人工智能部产品经理 范磊 本文首发|微信公众号 友盟数据服务 (ID:umengcom),转载请注明出处 If you are not running experiments,you a ...
- indesign图片规定在左下角_详解InDesign基本使用方法
详解InDesign基本使用方法 为了使朋友们尽快掌握InDesign的使用方法,下面,我们通过一个例子来说明它的操作过程.做之前,先要说两句.乍一接触Indesign,许多朋友会觉得很不熟悉,很不适 ...
- golang导入git包_使用go module导入本地包的方法教程详解
go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...
- java condition详解_Java使用Condition控制线程通信的方法实例详解
Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...
- python怎么画条形图-python绘制条形图方法代码详解
1.首先要绘制一个简单的条形图 import numpy as np import matplotlib.pyplot as plt from matplotlib import mlab from ...
最新文章
- SAP R/3系统的R和3分别代表什么含义,负载均衡的实现原理
- Android GL deadlock timeout error
- Linux网络技术管理
- Docker Registry本地私有仓库搭建
- 安装配置tengine
- SpringMVC 中设置日期字符串转换格式
- LNMP实现服务器轮询负载均衡
- Qt下的模态和非模态对话框
- python turtle绕原点旋转_「加德老师与小朋友们的编程之旅」Python海龟作图(上)
- excel countblank函数使用方法及其实例
- Windows任务栏搜索功能修复
- 基于javaweb+JSP+Servlet宿舍管理系统(超级管理员、宿舍管理员、学生)
- MySQL数据库的基本操作以及数据类型
- 飞机座舱布局工效综合评价与评价方法初探
- Web APIs:PC 端网页特效--常见网页特效案例--轮播图及节流阀思想
- 白话空间统计之:Moran's I(莫兰指数)
- Excel进行数据分析
- 7-1 重要的话说三遍
- 围绕竞争优势,看看电商企业的战略选择
- java中文资源收集
热门文章
- Zuul网关简介以及使用
- 我的 Ubuntu18 开机关机卡死问题终于解决啦.....
- C#中箱子、扳手、闪电等含义
- 系统找不到指定文件和OPENCV配置问题
- 【论文模型讲解】VideoBERT: A Joint Model for Video and Language Representation Learning
- 华为android如何删除,华为手机内存中的“其他”能删除吗?现在就来揭秘
- 视频教程-Office 365入门课程-云平台
- JavaScript 71 JavaScript JSON 71.9 JSON 服务器
- notify()和 notifyAll()区别
- 盖茨正式退休 携3500亿人民币身家转投慈善事业.