跟小D每日学口语

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

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

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
}

 

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

posted @ 2015-05-19 23:31  Danny Chen  阅读(2369)  评论(0编辑  收藏  举报