C#多線程的用法3-線程間的協作Join

來源:互聯網
上載者:User

標籤:如何   執行   str   try   tom   lin   用法   dom   new t   

在建立多線程應用程式時,如何確保線程間的協作往往比讓線程工作更重要。

線程間的協作最簡單的方式是採用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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.