join方法的功能就是使异步执行的线程变成同步执行。也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方法。如果不使用join方法,就不能保证当执行到start方法后面的某条语句时,这个线程一定会执行完。而使用join方法后,直到这个线程退出,程序才会往下执行。下面的代码演示了2种语言中多线程.join的用法。

JAVA版本:

package com.cn.net;public class test {/*** @param args* @throws InterruptedException */public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stub//线程Afinal Thread ThreadA = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++){System.out.println("A : " );if (i == 9){break;}try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}});Thread ThreadB = new Thread(new Runnable()  {@Overridepublic void run() {for (int i = 0; i < 5; i++){System.out.println("B : ");if (i == 4){break;}try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//                    try {
//                      ThreadA.join();//在这里插入线程A
//                  } catch (InterruptedException e) {
//                      // TODO Auto-generated catch block
//                      e.printStackTrace();
//                  }for (int i = 0; i < 5; i++){System.out.println("C : " );if (i == 4){break;}try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}});ThreadA.start();ThreadB.start();}}

  C#版本:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;namespace Mutiprocess
{class Program{static void Main(string[] args){//线程AThread ThreadA = new Thread(delegate(){for (int i = 0; i < 10; i++){Console.WriteLine("A : ");if (i == 9){break;}Thread.Sleep(1000);}});//线程BThread ThreadB = new Thread(delegate(){for (int i = 0; i < 5; i++){Console.WriteLine("B : ");if (i == 4){break;}Thread.Sleep(1000);}ThreadA.Join();//在这里插入线程Afor (int i = 0; i < 5; i++){Console.WriteLine("C : ");if (i == 4){break;}Thread.Sleep(1000);}});ThreadA.Start();ThreadB.Start();//            前5秒 A B交替出现,然后A出现5次,C出现5次。//如果注释掉ThreadA.Join(),那么结果是前5秒AB 交替出现 后5秒AC交替出现。//这里我就不再罗嗦了。还是那样线程B中join了线程A只有A执行结束,才可以继续执行线程B中剩下的代码。//join其实就是使异步执行线程转为同步执行。}}
}

  2中版本的执行(可能)结果是(cpu决定):

A :
B :
A :
B :
A :
B :
B :
A :
B :
A :
A :
A :
A :
A :
A :
C :
C :
C :
C :
C :

当把ThreadA.Join()  注释掉后的显示的规则结果是:

A :
B :
A :
B :
A :
B :
A :
B :
A :
B :
C :
A :
C :
A :
C :
A :
C :
A :
C :
A :

更多关于多线程的解释及例子相见

http://developer.51cto.com/art/200906/132331.htm

http://www.cnblogs.com/qinpengming/archive/2012/05/08/2490665.html

C#,JAVA各版本之Thread.join()详解相关推荐

  1. Java并发编程之Thread类详解

    Thread类详解: 线程(Thread): 是操作系统进行调度的最小单位,Java中的线程是对操作系统线程的封装.本文从线程的创建到停止结合代码和具体实例分析一下关于java线程的一些常见问题. 线 ...

  2. Java Thread.join()详解

     一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用joi ...

  3. java threas.jion_Java Thread.join详解

    使用方法 Thread t = new ThreadA(); t.start(); t.join(); 为什么要用 join() 方法 在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的 ...

  4. Java内存模型(JMM)详解-可见性volatile

    这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...

  5. java之yield(),sleep(),wait()区别详解-备忘笔记

    java之yield(),sleep(),wait()区别详解-备忘笔记 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如 ...

  6. 并发编程五:java并发线程池底层原理详解和源码分析

    文章目录 java并发线程池底层原理详解和源码分析 线程和线程池性能对比 Executors创建的三种线程池分析 自定义线程池分析 线程池源码分析 继承关系 ThreadPoolExecutor源码分 ...

  7. java的String类源码详解

    java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...

  8. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

  9. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

最新文章

  1. 林轩田机器学习基石课程学习笔记1 -- The Learning Problem
  2. php实现队列上传,php实现队列
  3. 常量池之字符串常量池String.intern()
  4. 查询 service monitor 时发生内部错误_通过Service访问应用 (1)
  5. 当执行游戏0xc000007b错误的解决方法
  6. ReadWriteLock读写文件
  7. 【Linux】kali linux 安装 google chrome
  8. 无法执行该VI,必须使用LabVIEW完整版开发系统才可以解决该错误
  9. length()函数_奇怪的Haskell实验——length的实现是?
  10. windows10应用商店下安装kali子系统
  11. Arch Linux中的Pacman命令如何使用
  12. JAVA后端如何保证业务操作的幂等性
  13. 计算机画面隐藏重叠怎么分开,windows7计算机怎么设置打开窗口不重叠?
  14. 坚持自己的坚持,以不二的姿态坚持到底
  15. dubbo整合springboot图解版(九)
  16. excel 计算机职称,职称计算机2017年Excel知识点:工作表的编辑
  17. css html 实现刻度,vue语法css实现刻度尺
  18. 它听键盘声就知道你敲的是什么——GitHub 热点速览 Vol.51
  19. python抓取股市实时交易数据_python实时读取股票大单交易数据
  20. php 微信分享快速实现

热门文章

  1. VTK:InfoVis之ArrayToTable
  2. QDoc清单文件示例
  3. OpenGL 三角形的渲染
  4. C++实现二叉搜索树的查找(附完整源码)
  5. C++ Opengl 绘制字体源码
  6. 经典C语言程序100例之三八
  7. 17届中职计算机应用基础,西安交通大学17年3月课程考试《计算机应用基础》作业考核试题...
  8. c++ 连续图片显示_计算整数的和并显示结果
  9. pandas中合并数据集
  10. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)