等待多个子线程结束后再执行主线程
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 }
自己建一个控制台程序进行测试吧!希望能对你有所启发!
|
请发表评论