文章目录

  • 一、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方法?相关推荐

  1. Mysql 优化器内部JOIN算法hash join Nestloopjoin及classic hash join CHJ过程详解

    Mysql hash join之classic hash join CHJ过程详解 hash join的历史 优化器里的hash join算法在SQL Server.Oracle.postgress等 ...

  2. python expandtabs_详解Python中expandtabs()方法的使用

    详解Python中expandtabs()方法的使用 expandtabs()方法返回制表符,即该字符串的一个副本. '\t'已经使用的空间,可选择使用给定的tabsize(默认8)扩展. 语法 以下 ...

  3. java 拦截器顺序_Springmvc拦截器执行顺序及各方法作用详解

    实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInt ...

  4. go语言字符串换行_Go语言中的字符串处理方法示例详解

    1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号(" ...

  5. BAT 都在用的方法,详解 A/B 测试的那些坑!

    作者|蚂蚁金服人工智能部产品经理 范磊 本文首发|微信公众号 友盟数据服务 (ID:umengcom),转载请注明出处 If you are not running experiments,you a ...

  6. 数据训练营|BAT都在用的方法,详解A/B测试的那些坑!

    作者|蚂蚁金服人工智能部产品经理 范磊 本文首发|微信公众号 友盟数据服务 (ID:umengcom),转载请注明出处 If you are not running experiments,you a ...

  7. indesign图片规定在左下角_详解InDesign基本使用方法

    详解InDesign基本使用方法 为了使朋友们尽快掌握InDesign的使用方法,下面,我们通过一个例子来说明它的操作过程.做之前,先要说两句.乍一接触Indesign,许多朋友会觉得很不熟悉,很不适 ...

  8. golang导入git包_使用go module导入本地包的方法教程详解

    go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...

  9. java condition详解_Java使用Condition控制线程通信的方法实例详解

    Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...

  10. python怎么画条形图-python绘制条形图方法代码详解

    1.首先要绘制一个简单的条形图 import numpy as np import matplotlib.pyplot as plt from matplotlib import mlab from ...

最新文章

  1. SAP R/3系统的R和3分别代表什么含义,负载均衡的实现原理
  2. Android GL deadlock timeout error
  3. Linux网络技术管理
  4. Docker Registry本地私有仓库搭建
  5. 安装配置tengine
  6. SpringMVC 中设置日期字符串转换格式
  7. LNMP实现服务器轮询负载均衡
  8. Qt下的模态和非模态对话框
  9. python turtle绕原点旋转_「加德老师与小朋友们的编程之旅」Python海龟作图(上)
  10. excel countblank函数使用方法及其实例
  11. Windows任务栏搜索功能修复
  12. 基于javaweb+JSP+Servlet宿舍管理系统(超级管理员、宿舍管理员、学生)
  13. MySQL数据库的基本操作以及数据类型
  14. 飞机座舱布局工效综合评价与评价方法初探
  15. Web APIs:PC 端网页特效--常见网页特效案例--轮播图及节流阀思想
  16. 白话空间统计之:Moran's I(莫兰指数)
  17. Excel进行数据分析
  18. 7-1 重要的话说三遍
  19. 围绕竞争优势,看看电商企业的战略选择
  20. java中文资源收集

热门文章

  1. Zuul网关简介以及使用
  2. 我的 Ubuntu18 开机关机卡死问题终于解决啦.....
  3. C#中箱子、扳手、闪电等含义
  4. 系统找不到指定文件和OPENCV配置问题
  5. 【论文模型讲解】VideoBERT: A Joint Model for Video and Language Representation Learning
  6. 华为android如何删除,华为手机内存中的“其他”能删除吗?现在就来揭秘
  7. 视频教程-Office 365入门课程-云平台
  8. JavaScript 71 JavaScript JSON 71.9 JSON 服务器
  9. notify()和 notifyAll()区别
  10. 盖茨正式退休 携3500亿人民币身家转投慈善事业.