您的位置:首页 > 编程语言 > C#

C#多线程JOIN方法初探

2014-03-09 21:21 218 查看
 [说明:刚接触多线程时,弄不明白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再次处于交替运行状态中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: