A.join()等待当前线程A运行结束。
A.join(millis) 当前线程最多等待A时间millis


原理

join()

调用join(0),即一直等待。
当前线程调用之后,会从RUNNABLEWAITING

public final void join() throws InterruptedException {join(0);}

join(millis)

类似保护性暂停
当前线程调用后,会从RUNNABLETIMED_WAITING

public final synchronized void join(long millis)throws InterruptedException {long base = System.currentTimeMillis();long now = 0;if (millis < 0) {throw new IllegalArgumentException("timeout value is negative");}if (millis == 0) {//一直等待while (isAlive()) {wait(0);}} else {while (isAlive()) {long delay = millis - now;if (delay <= 0) {break;}wait(delay);now = System.currentTimeMillis() - base;}}}

java线程——join相关推荐

  1. java线程join方法

    java线程join方法 1.join方法 ​ join方法的作用是进行线程插队,也就是说调用了join方法的线程相对于调用它的上级线程拥有跟高的执行权.调用join方法的线程的上级线程必须等待调用j ...

  2. java线程join方法会释放锁吗

    java线程join方法会释放锁吗,虽然join底层使用wait,wait是释放锁的 wait()和join()的调用方的区别: object.wait()和thread.join() join()的 ...

  3. JAVA 线程Join

    join方法: 当某个线程要等待另一个线程执行结束后才能继续执行时,使用join方法. public class DinnerThread {public static void main(Strin ...

  4. Java线程状态及 wait、sleep、join、interrupt、yield等的区别

    Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到  被中断.被拥有该对象锁的线程唤醒(notify或not ...

  5. java线程 yield_Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

  6. java线程中yield()和join()的区别

    多线程在面试中是非常受欢饮的题目,我个人认为我们很少有机会能够真正的用到复杂的多线程(我在7年前使用过一次),熟悉这些概念能够增加你的信心,先前,我已经讨论了一个相似的问题,wait()和sleep( ...

  7. Java线程详解:wait、notify、notifyAll、join

    线程的概念 线程是进程的子任务,一个进程可以创建多个线程,线程不拥有系统资源,但是线程可以共享进程的资源,而线程自己也有一块独立的小块空间:包括堆栈,程序计数器和局部变量. 线程是CPU调度和分派的基 ...

  8. java 线程方法join的简单总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  9. java线程安全总结 - 1 (转载)

    原文地址:http://www.jameswxx.com/java/java%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E6%80%BB%E7%BB%93/ 最近想将ja ...

最新文章

  1. Intellij IDEA 中无法下载 Cloud Toolkit 问题解决
  2. tensowflow 训练 远程提交_一文说清楚Tensorflow分布式训练必备知识
  3. Acwing第 39 场周赛【完结】
  4. 笔记本安装linux系统_Win10怎么安装linux双系统?win10安装linux双系统教程
  5. Codeforces Round #426 (Div. 2) C. The Meaningless Game
  6. cam350菜单怎么切换成中文_对CAM350英文菜单不熟悉的可以参考一下这份CAM350中文菜单...
  7. ESP8266 教程1 — ESP8266硬件平台介绍
  8. c++STL库最详细介绍(保姆级教学)
  9. 【Swagger】Swagger 注解学习
  10. 中国软件行进销存管理系统 免费
  11. Fresco之强大之余的痛楚
  12. 03-----生产环境 CPU 占用过高,你如何解决?
  13. keep-alive 理解 如何实现?缓存是什么?
  14. 解决 org.gjt.mm.mysql.Driver 报错问题(目前有效,看后续会不会出什么问题)
  15. 【剑指offer-54】20190907/03 字符流中第一个不重复的字符
  16. ubuntu下,在QT中利用科大讯飞语音库实现语音合成TTS
  17. 华为电脑管家装到D盘_科普 | 电脑C盘满了,不想重新分区怎样扩容?我教你
  18. 计算机的内存条比硬盘,电脑硬盘比内存条还小,全是这个协议的功劳!
  19. 科技公司LOGO在线制作设计
  20. 用java做小学数学系统_基于jsp的小学数学试卷生成-JavaEE实现小学数学试卷生成 - java项目源码...

热门文章

  1. Canny-VO: 基于几何3D-2D边缘对准的RGB-D视觉里程计
  2. 求最小Hamming距离的DNA序列
  3. C++Builder及VC的库相互调用
  4. 【Unity_UWP】Unity 工程发布win10 UWP 时的本地文件读取 (上篇)
  5. 4 Git 基础 - 撤消操作
  6. spring boot学习资料以及DEMO项目
  7. 在Mac上使用Nginx和FastCGI部署Flask应用
  8. 使apk具有system权限
  9. 参加LinuxCon Japan 2012
  10. 嵌入式Linux内存压力测试