等待多个子线程结束后再执行主线程

class MultiThread
{
  #region join test
  public void MultiThreadTest()
  {
    Thread[] ths = new Thread[2];
    ths[0] = new Thread(Method1);
    ths[1] = new Thread(Method2);
    foreach (Thread item in ths)
    {
      //首先让所有线程都启动
      item.Start();
      //试想一下在这里加上item.Join()可以达到我们所需要的效果吗?
      //A:如果这阻塞了线程(启动item线程的线程,也就是主线程),那么启动了第一个线程之后
      //主线程被阻塞,待线程1被执行完的时候再启动先一个线程。那么多线程就失去了意义,变成了同步。
    }
    foreach (Thread item in ths)
    {
      //数组中的所有子线程都对主线程进行阻塞,只是阻塞了启动
      item.Join();
      Thread.Sleep(1000);//用它来证明主线程是在启动了每一个子线程后才sleep的
    }
    Method3();
  }

  private void Method1()
  {
    for (int i = 0; i < 10; i++)
    {
      Console.WriteLine("A");
      Thread.Sleep(300);
    }
  }
  private void Method2()
  {
    for (int i = 0; i < 10; i++)
    {
      Console.WriteLine("B");
      Thread.Sleep(300);
    }
  }

  private void Method3()
  {
    for (int i = 0; i < 10; i++)
    {
      Console.WriteLine("C");
      Thread.Sleep(300);
    }
  }
  #endregion
}

自己建一个控制台程序进行测试吧!希望能对你有所启发!

C# 多线程join的用法,等待多个子线程结束后再执行主线程的更多相关文章

  1. Java Thread.join()详解--父线程等待子线程结束后再结束

    目录(?)[+] 阅读目录 一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法   join是Th ...

  2. Python多线程join的用法

    import threading, time def Myjoin(): print 'hello world!' time.sleep(1) for i in range(5): t=threadi ...

  3. 等待某(N)个线程执行完再执行某个线程的几种方法(Thread.join(),CountDownLatch,CyclicBarrier,Semaphore)

    1.main线程中先调用threadA.join() ,再调用threadB.join()实现A->B->main线程的执行顺序 调用threadA.join()时,main线程会挂起,等 ...

  4. join当前线程等待指定的线程结束后才能继续运行

    模拟一个QQ游戏大厅斗地主 /** sleep(休眠.睡眠) join当前线程等待指定的线程结束后才能继续运行 */ class Player extends Thread{ private Stri ...

  5. java 多线程——join()方法

    在java语言中,join()方法的作用是让调用该方法的线程在执行完run()方法后,再执行join 方法后面的代码. 简单点说就是,将两个线程合并,用于实现同步的功能. 具体而言:可以通过线程A的j ...

  6. 如何让线程A等待B执行结束后执行?

    1. 使用条件变量 判断是否任务B已经做完,然后再执行任务A. 测试代码可看:https://blog.csdn.net/guochao6531/article/details/78075882 2. ...

  7. 使用join和CountDownLatch来等待线程结束

    1.join方法的实现 join只能在start()之后调用, join 某个线程A,会使当前线程B进入等待,直到线程A结束生命周期(isAlive()==false) ,或者达到给定的时间. 在此期 ...

  8. Java多线程 -join用法

    阿里面试官问我这个问题,我仔细总结了一下: 参考:sleep.yield.wait.join的区别(阿里面试) 1. join()介绍 join() 定义在Thread.java中.join() 的作 ...

  9. 你能说出多线程中sleep、yield、join的用法及sleep与wait区别?

    Object中的wait.notify.notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等待集逻辑 通过这三个方法完成线程在指定锁(监视器)上的等待与唤醒,这三个方法是以锁( ...

随机推荐

  1. plain framework 1 参考手册 入门指引之 许可协议

    许可 介绍 Apache2 License 介绍 使用非常友好的阿帕奇2许可协议,你可以应用到你想用的任何应用上,如需修改源码,请保留原作者信息. Apache2 License Apache Lic ...

  2. 增量式PID计算公式4个疑问与理解

    一开始见到PID计算公式时总是疑问为什么是那样子?为了理解那几道公式,当时将其未简化前的公式“活生生”地算了一遍,现在想来,这样的演算过程固然有助于理解,但假如一开始就带着对疑问的答案已有一定看法后再 ...

  3. [IPA]IOS In App Purchase(内购)验证

    参考我之前的笔记 苹果内购笔记,在客户端向苹果购买成功之后,我们需要进行二次验证. 二次验证 IOS在沙箱环境下购买成功之后,向苹果进行二次验证,确认用户是否购买成功. 当应用向Apple服务器请求购 ...

  4. JS读取写入删除COOKIE的各种操作

    1. .NET后置代码中获取 Response.Redirect("http://www.baidu.com?id=" +Request.Cookies["size&qu ...

  5. Samsung I9103刷cm-10.1的方法

    按照官方网站的说明一步一步的做下去的时候发现在执行heimdall.exe文件的时候出现“不是win32的应用程序”的错误提示,因此决定按照其它方法安装recovery,然后再刷入CM10.1. sa ...

  6. 【QCon笔记】Native 和 Web 融合

    #main img{width:100%;} 简介 理清 Native 和 Web 的亮点和痛点,借鉴对方亮点解决自身的痛点,并给出淘系 App 在这些方面的实践. Mobile Web 的协作能力底 ...

  7. Java读写文本文件

    1 字符输入(FileReader , char) import java.io.IOException; import java.io.FileReader; public class ep10_1 ...

  8. Iterator遍历器 调用Symbol.Iterator属性,遍历器对象。

    Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员. 第二次调 ...

  9. EEG montage

    Source: WikiPedia - Electroencephalography Since an EEG voltage signal represents a difference betwe ...

  10. ubuntu12.04禁止单用户本地无密码root登录

    1)grub-mkpasswd-pbkdf2 拿到类似grub.pbkdf2.sha512.10000.C093FE6825CDCC2F84934ABC406445E92EE098733C60E6D1 ...