1. package com.cn.test.thread;
  2.  
  3. public class TestJoin extends Thread{
  4.  
  5. private String name;
  6. public TestJoin(String name) {
  7. this.name = name;
  8. }
  9.  
  10. public static void main(String[] args) {
  11.  
  12. TestJoin join1 = new TestJoin("thread-1");
  13. TestJoin join2 = new TestJoin("thread-2");
  14. join1.start();
  15. join2.start();
  16.  
  17. try {
  18. join1.join();
  19. } catch (InterruptedException e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. }
  23.  
  24. System.out.println("main--------------------线程");
  25. }
  26.  
  27. @Override
  28. public void run() {
  29.  
  30. for (int i=0; i<3; i++) {
  31. System.out.println(Thread.currentThread().getName() + "i=" + i) ;
  32. }
  33. }
  34.  
  35. }

上述例子中: 在main方法中join1线程调用join方法,如果main方法抢到cpu的执行权,会将cpu的执行权让出来给join1线程,直到join1线程执行完毕之后才进行main线程的执行。join1和join2是同步进行竞争cpu的资源。

运行结果:

  1. Thread-0i=0
  2. Thread-1i=0
  3. Thread-0i=1
  4. Thread-1i=1
  5. Thread-0i=2
  6. Thread-1i=2
  7. main--------------------线程
  8.  
  9. main线程需要等待join1线程执行完毕之后才能进行执行

 Thread的join方法在start方法之前进行执行,不会触发这种cpu让出执行权的操作,此时和mian线程是并发执行的。

  1. package com.cn.test.thread;
  2.  
  3. public class TestJoin extends Thread{
  4.  
  5. private String name;
  6. public TestJoin(String name) {
  7. this.name = name;
  8. }
  9.  
  10. public static void main(String[] args) {
  11.  
  12. TestJoin join1 = new TestJoin("thread-1");
  13. TestJoin join2 = new TestJoin("thread-2");
  14. try {
  15. join1.join();
  16. } catch (InterruptedException e) {
  17. // TODO Auto-generated catch block
  18. e.printStackTrace();
  19. }
  20. join1.start();
  21. join2.start();
  22.  
  23. System.out.println("main--------------------线程");
  24. }
  25.  
  26. @Override
  27. public void run() {
  28.  
  29. for (int i=0; i<3; i++) {
  30. System.out.println(Thread.currentThread().getName() + "i=" + i) ;
  31. }
  32. }
  33.  
  34. }

  执行结果:

  1. main--------------------线程
  2. Thread-1i=0
  3. Thread-1i=1
  4. Thread-1i=2
  5. Thread-0i=0
  6. Thread-0i=1
  7. Thread-0i=2

  总结:join方法可以控制多线程的执行顺序。

Thread 的join方法的更多相关文章

  1. Thread线程join方法自我理解

    Thread线程join方法自我理解 thread.join():等待thread线程运行终止,指的是main-thread(main线程)必须等待thread线程运行结束,才能继续thread.jo ...

  2. 浅析Thread的join() 方法

    Thread中的 join() 方法在实际开发过程中可能用的不是很多,但是在面试中作为考察基本功知识的扎实与否,经常会被用到.因此,对于 Thread 的 join() 方法进行了一定的研究. 常见的 ...

  3. python thread的join方法解释

    python的Thread类中提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行.这个方法还可以设定一个timeout参数,避免无休止的等待.因为两个线程顺序完成,看起来象一个 ...

  4. 8.Thread的join方法

    1.Thread类的join方法表示:当前线程执行结束再执行其它线程!在Thread类中有三个重载的方法分别是: public final synchronized void join(long mi ...

  5. java线程基础巩固---分析Thread的join方法详细介绍,结合一个典型案例

    关于Thread中的join方法貌似在实际多线程编程当中没怎么用过,在当初学j2se的时候倒时去学习过它的用法,不过现在早已经忘得差不多啦,所以对它再复习复习下. 首先先观察下JDK对它的介绍: 其实 ...

  6. Thread的join方法

    一个线程在执行的过程中,可能调用另一个线程,前者可以称为调用线程,后者成为被调用线程. Thread.Join方法的使用场景:调用线程挂起,等待被调用线程执行完毕后,继续执行. 如下案列: 当NewT ...

  7. Thread中join()方法进行介绍

    http://www.cnblogs.com/skywang12345/p/3479275.html https://blog.csdn.net/dabing69221/article/details ...

  8. 浅谈Java多线程中的join方法

    先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...

  9. Java多线程中的join方法

    新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String name ...

随机推荐

  1. [bzoj4445] [SCOI2015]小凸想跑步 (半平面交)

    题意:凸包上一个点\(p\),使得\(p\)和点\(0,1\)组成的三角形面积最小 用叉积来求: \(p,i,i+1\)组成的三角形面积为: (\(\times\)为叉积) \((p_p-i)\tim ...

  2. POJ1591 M*A*S*H (JAVA)

    这水题,真的坑 测试数据最后有空行,如果用sc.hasNextLine()判断,会RE 要改为sc.hasNext() 搞了我一上午,烦死 import java.util.*; public cla ...

  3. 【转载】Thrift概述

    来自 <https://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/#ibm-pcon> 一个简单的 Thrift 实例 首先 ...

  4. ubuntu 安装python3

    1.安装python3 apt-get install python3 2.安装pip3 apt-get install python3-pip 3.为python3添加包 pip3 install ...

  5. 编程开发之--Java集合类继承与实现必备知识

    1.LinkedHashSet有序链式集合 举例: long startTime=System.currentTimeMillis(); LinkedHashSet oprTypeSet = new ...

  6. 手把手教你在CentOS 7.4下搭建Zabbix监控(转)

    Linux系统版本:CentOS 7.4 1.安装前需要先关闭selinux和firewall. 1.1 [root@zabbix ~]# vi /etc/selinux/config 将SELINU ...

  7. windows下webpack不是内部命令 解决方法

    安装webpack 到打包文件一路出现的各种问题 windows下webpack不是内部命令 安装完webpack后要加下环境变量 系统变量新建 NODE_PATH 变量值E:\demo\webpac ...

  8. 主流服务器虚拟化技术简单使用——Xen(一)

    Tips:因为博客园网页布局的原因,部分图片显示不清晰,可以放大网页查看清晰图片. 如果系统使用物理机,需要在BIOS里面开启Intel VT-x(或AMD-V),如果是VMware workstat ...

  9. oracle nvl()函数

    oracle的nvl()函数作用是当第一个值不为null时,返回第一个值,否则返回第二个值. 当第一个值为一个运算表达式时,那么第二个的值被限定为只能是NUMBER类型或者能隐式转换为NUMBER类型 ...

  10. rocketmq sql解析过滤

    activemq rocketmq kafka robbitmq 公司 apache alibaba LinkedIn Pivotal 编写语言 java Erlang 客户端支持 其他协议支持 mq ...