join方法的原理

就是调用相应线程的wait方法进行等待操作的,假如线程1中调用了线程2的join方法,则相当于在线程1中调用了线程2的wait方法,当线程2执行完(或者到达等待时间),线程2会自动调用自身的notifyAll方法唤醒线程1,从而达到同步的目的。

例子

一、如线程1调用线程2的join方法,即线程2.join(0);(需要注意的是,jdk规定,join(0)的意思不是线程1等待线程2     零秒,而是线程1等待线程2无限时间,直到B线程执行完毕,即join(0)等价于join()。)

二、如线程1调用线程2的join方法,即线程2.join(3);(表示线程1等待线程2  三秒,三秒过后线程和线程并行执行)

join函数源码

 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;
}
}
}

最新文章

  1. SQL/LINQ/Lamda 写法[转发]
  2. java(2)之前往对象村
  3. dede数据库类使用方法 $dsql
  4. jQuery extend 实现代码封装
  5. Log4j用法
  6. React Native交互组件之Touchable
  7. 上传图片HTML &lt;form&gt; 标签的 method 属性
  8. “通过jumpserver远程登录linux服务器,rz上传文件速度过慢”问题的解决
  9. 使用jsTree动态加载节点
  10. [LeetCode]题解(python):058-Length of Last Word
  11. C语言开发工具
  12. LeetCode 538. Convert BST to Greater Tree (把二叉搜索树转换成较大树)
  13. 新概念英语(1-109)A Good Idea
  14. 2019/4/22 kmp模板
  15. Eclipse neon 4.6 安装tomcat
  16. fedora 29 桌面版 设置 cockpit 自动开机启动
  17. PS滤镜给城市夜空照片添加满天星
  18. HTML学习笔记Day12
  19. jsfl 常用自定义方法
  20. 2018.09.27 codeforces1045D. Interstellar battle(期望dp)

热门文章

  1. [UE4]Math Expression计算数学公式,可以接受参数
  2. browserify babel gulp 没有编译import的文件
  3. TableStore:创建SyncClient+getRow读取一行数据
  4. sqlserver表结构的修改
  5. 05-spark streaming &amp; kafka
  6. PowerDesigner 概念数据模型(CDM) 说明
  7. python类脚本
  8. python变量存储和深浅拷贝
  9. uva10603-倒水问题-暴力枚举-隐式图搜索
  10. Call to undefined function think\finfo_open() 报错 解决方法