知识大全 关于C#中Thread.Join()的一点理解

Posted 函数

篇首语:人生难得几回搏,此时不搏待何时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 关于C#中Thread.Join()的一点理解相关的知识,希望对你有一定的参考价值。

关于C#中Thread.Join()的一点理解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  今天是第一次在C#中接触Thread 自己研究了一下其中Thread Join()这个方法 下面谈谈自己的理解

  Thread Join()在MSDN中的解释很模糊 Blocks the calling thread until a thread terminates

  有两个主要问题

   什么是the calling thread?

   什么是a thread?

  首先来看一下有关的概念 我们执行一个 exe文件实际上就是开启了一个进程 同时开启了至少一个线程

  但是真正干活的是线程 就好比一个Team有好几个人 但是真正干活的是人不是Team

  具体到代码来说 以Console Application为例 程序Test exe从Main函数开始运行 实际上是有一个线程

  在执行Main函数 我们称作MainThread 假如我们在Main函数中声明了一个Thread 称作NewThread 并且调用了

  NewThread Start()的方法 那么 MainThread在处理Main函数里面的代码时遇到NewThread Start()时 就会去调用NewThread

  基于上面的讨论 我们可以得出结论 在我们刚才的例子中the calling thread就是MainThread 而a thread指的洽洽就是MainThread调用的NewThread线程

  现在回到MSDN的解释 我们可以这么翻译 当NewThread调用Join方法的时候 MainThread就被停止执行 直到NewThread线程执行完毕 这样就好理解了吧O(∩_∩)O哈哈~

  好了 前面分析完了 现在来看测试用例吧

  Title

  using System;

  using System Collections Generic;

  using System Linq;

  using System Text;

  using System Threading;

  namespace Test

  

  class TestThread

  

  private static void ThreadFuncOne()

  

  for (int i = ; i < ; i++)

  

  Console WriteLine(Thread CurrentThread Name +    i =  + i)

  

  Console WriteLine(Thread CurrentThread Name + has finished )

  

  static void Main(string[] args)

  

  Thread CurrentThread Name = MainThread ;

  Thread newThread = new Thread(new ThreadStart(TestThread ThreadFuncOne))

  newThread Name = NewThread ;

  for (int j = ; j < ; j++)

  

  if (j == )

  

  newThread Start()

  newThread Join()

  

  else

  

  Console WriteLine(Thread CurrentThread Name +    j =  + j)

  

  

  Console Read()

  

  

  

  下面是测试的结果

  结论 从测试中我们可以很清楚的看到MainThread在NewThread Join被调用后被阻塞 直到NewThread

cha138/Article/program/net/201311/11942

相关参考