今天又把join的用法大概看了一下,其实理解起来,还是比较简单。用个简单的例子说明一下吧。

1、通过下面的例子,可以看到说出结果中首先全部是是Thread-1,之后才会是Thread-2,这是因为在主线程中调用了thread1的join方法,就等于将主线程和thread1的执行方式由并行改为了串行,也就是必须当thread1全部执行结束之后,才会调用thread2的方法。这就可以解释为啥先全部是thread-1之后才会有thread-2了。

public class TestJoin {
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(new JoinThread());;
Thread thread2 = new Thread(new JoinThread()); thread1.start();
thread1.join();
thread2.start(); } static class JoinThread implements Runnable { @Override
public void run() {
for(int i=0; i<100; i++) {
try {
System.out.println(Thread.currentThread().getName());
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}

2、关于join方法其实还可以提交过期时间,也就是在执行到达预定时间后,执行方式将继续以并行的方式执行。

thread1.join(10);//表示10ms后,将结束join。

3、通过join的源码中可以到,其实join的本质还是调用的wait方法。关于wait方法的实现,就无法分析了。因为它是个native方法,无法进一步查看源码了

  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. txt文本变成html
  2. Java递归算法——三角数字(消除递归)
  3. PotPlayer 1.6.52965 美化版|视频播放器
  4. 仿淘宝详情转场(iOS,安卓没有这功能)
  5. Spring MVC整合logback日志框架实战
  6. media type 与 media query
  7. Linux下如何高效删除一个几十G的文本文件的最后一行或几行
  8. Caused by: java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.HibernateTemplate
  9. nodejs轻量级时间格式化组件Moment.js的使用例子
  10. Python中路径操作
  11. java爬虫实现爬取百度风云榜Top10
  12. MyEclipse2017破解设置与maven项目搭建
  13. GCD 与 LCM UVA - 11388
  14. 框架源码系列十二:Mybatis源码之手写Mybatis
  15. 洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)
  16. react给一个div行内加背景图片并实现cover覆盖模式居中显示
  17. Set接口——HashSet集合
  18. 利用 AWS Elastic Beanstalk 部署 Wordpress 环境
  19. drupal drush 在windows下的安装和配置
  20. 开发shellcode的艺术

热门文章

  1. Python面试题之多个装饰器执行顺序
  2. 虚拟中没有eth0
  3. 注意:PHP7中十个需要避免的坑
  4. Java学习第四周学习笔记
  5. 20145324 《Java程序设计》第10周学习总结
  6. 20135302魏静静——linux课程第三周实验及总结
  7. angularjs中的jqlite的认识理解及操作使用
  8. 树梅派配置ad-hoc网络
  9. 异步:asyncio和aiohttp的一些应用(2)
  10. mybatis中的映射类型