等待多個子線程結束后再執行主線程
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
}
自己建一個控制台程序進行測試吧!希望能對你有所啟發!
