C#多線程的用法3-線程間的協作Join
阿新 • • 發佈:2017-08-20
con ren err ati cat string format reads threads
在創建多線程應用程序時,如何確保線程間的協作往往比讓線程工作更重要。
線程間的協作最簡單的方式是采用Join來進行,如下:
/// <summary> /// 多線程協作-Join方式 /// 解決線程間同步工作問題 /// </summary> private static void MultiThreadSynergicWithJoin() { int[] array = new int[3]; Thread producer = null, customer = null; producer = new Thread(() => { Console.WriteLine(String.Format("{0} start work", Thread.CurrentThread.Name)); Random random = new Random(); try { array[0] = random.Next(10); array[1] = random.Next(10); array[2] = random.Next(10); Console.WriteLine(String.Format("{0} work over", Thread.CurrentThread.Name)); Thread.Sleep(1000); } catch (ThreadAbortException ex) { Console.WriteLine(String.Format("Sub Thread {0} Abort", Thread.CurrentThread.Name)); } }) { Name = "producer" }; customer = new Thread(() => { Console.WriteLine(String.Format("{0} start work", Thread.CurrentThread.Name)); try { producer.Join(); Console.WriteLine(array[0]); Console.WriteLine(array[1]); Console.WriteLine(array[2]); Console.WriteLine(String.Format("{0} work over", Thread.CurrentThread.Name)); } catch (ThreadInterruptedException ex) { Console.WriteLine(String.Format("Sub Thread {0} Interrupted", Thread.CurrentThread.Name)); } }) { Name = "customer" }; Console.WriteLine("Main Thread"); customer.Start(); producer.Start(); Console.WriteLine("Main Thread Wait Sub Thread"); }
說明:
1、在調用producer.Join()時,customer線程將暫停執行而進入等待producer線程執行的過程。在producer線程執行完畢後,customer線程才返回繼續執行後續代碼。
2、producer與customer誰先啟動無所謂,但應保證在調用producer.Join時滿足:producer線程必須啟動過,即調用過Start方法,如果在調用Join時,被調用線程已經結束或終止,Join方法將立即返回執行後續代碼
3、對於多線程間的協作Join方式較為適合線程數量不多,對資源需求有明確先後順序的情況(個人總結,如有錯誤,歡迎拍磚)。
C#多線程的用法3-線程間的協作Join