日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#多线程JOIN方法初探

發布時間:2023/12/19 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#多线程JOIN方法初探 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[說明:剛接觸多線程時,弄不明白Join()的作用,查閱了三本書,都不明不白。后來經過自己的一番試驗,終于弄清了Join()的本質。大家看看我這種寫法是否易懂,是否真的寫出了Join()的本質,多提寶貴意見。]

  Thread類的Join()方法能夠將兩個交替執行的線程合并為順序執行的線程。比如在線程B中調用了線程A的Join()方法,線程A將插入線程B之前,直到線程A執行完畢后,才會繼續執行線程B。

  試一試:線程的插入

  //《C#初學課堂》
    //注意添加命名空間
    using System.Threading;
  
    static void Main(string[] args)
    {
      //線程A
      Thread ThreadA = new Thread(delegate()
      {
        for (int i = 0; i <= 100000000; i++)
        {
          if (i % 1000000 == 0)
          {
            Console.Write('A');
          }
        }
      });
  
      //線程B
      Thread ThreadB = new Thread(delegate()
      {       
        for (int i = 0; i <= 50000000; i++)
        {
          if (i % 1000000 == 0)
          {
            Console.Write('B');
          }
        }
  
        //在這里插入線程A
        ThreadA.Join();
  
        for (int i = 0; i <= 50000000; i++)
        {
          if (i % 1000000 == 0)
          {
            Console.Write('b');
          }
        }
      });
  
      //啟動線程
      ThreadA.Start();
      ThreadB.Start();
    }

  運行結果如下,你能分析清楚為什么嗎?

由運行結果可以看出,一開始兩個線程交替進行,當線程B執行到語句“ThreadA.Join()”時,線程A被插入到線程B之前,兩個線程合并到一起,變為順序執行,直到執行完線程A中的所有語句,才去執行線程B中剩余的語句。

  換句話說,當我們在線程B中調用ThreadA.Join()時,該方法只有在線程ThreadA執行完畢之后才會返回。Join()函數還可以接受一個表示毫秒數的參數,當達到指定時間后,如果線程A還沒運行完畢,那么Join函數將返回,這時線程A和線程B再次處于交替運行狀態中。

http://www.cnblogs.com/millen/archive/2009/09/07/1520353.html

?

總結

以上是生活随笔為你收集整理的C#多线程JOIN方法初探的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。