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
}

 

自己建一個控制台程序進行測試吧!希望能對你有所啟發!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM