zoukankan      html  css  js  c++  java
  • 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();
        }

      运行结果如下,你能分析清楚为什么吗?

    [C#初学课堂]多线程:Thread类的Join()方法

      由运行结果可以看出,一开始两个线程交替进行,当线程B执行到语句“ThreadA.Join()”时,线程A被插入到线程B之前,两个线程合并到一起,变为顺序执行,直到执行完线程A中的所有语句,才去执行线程B中剩余的语句。

      换句话说,当我们在线程B中调用ThreadA.Join()时,该方法只有在线程ThreadA执行完毕之后才会返回。Join()函数还可以接受一个表示毫秒数的参数,当达到指定时间后,如果线程A还没运行完毕,那么Join函数将返回,这时线程A和线程B再次处于交替运行状态中。

  • 相关阅读:
    [JSOI2007][BZOJ1031] 字符加密Cipher|后缀数组
    leetcode Flatten Binary Tree to Linked List
    leetcode Pascal's Triangle
    leetcode Triangle
    leetcode Valid Palindrome
    leetcode Word Ladder
    leetcode Longest Consecutive Sequence
    leetcode Sum Root to Leaf Numbers
    leetcode Clone Graph
    leetcode Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/millen/p/1520353.html
Copyright © 2011-2022 走看看