今天是第一次在C#中接触Thread自己研究了一下其中ThreadJoin()这个方法下面谈谈自己的理解
ThreadJoin()在MSDN中的解释很模糊Blocks the calling thread until a thread terminates
有两个主要问题
什么是the calling thread?
什么是a thread?
首先来看一下有关的概念 我们执行一个exe文件实际上就是开启了一个进程同时开启了至少一个线程
但是真正干活的是线程就好比一个Team有好几个人但是真正干活的是人不是Team
具体到代码来说以Console Application为例程序Testexe从Main函数开始运行实际上是有一个线程
在执行Main函数我们称作MainThread假如我们在Main函数中声明了一个Thread称作NewThread并且调用了
NewThreadStart()的方法那么 MainThread在处理Main函数里面的代码时遇到NewThreadStart()时就会去调用NewThread
基于上面的讨论我们可以得出结论在我们刚才的例子中the calling thread就是MainThread而a thread指的洽洽就是MainThread调用的NewThread线程
现在回到MSDN的解释我们可以这么翻译当NewThread调用Join方法的时候MainThread就被停止执行直到NewThread线程执行完毕这样就好理解了吧O(∩_∩)O哈哈~
好了前面分析完了现在来看测试用例吧
Title
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemText;
using SystemThreading;
namespace Test
{
class TestThread
{
private static void ThreadFuncOne()
{
for (int i = ; i < ; i++)
{
ConsoleWriteLine(ThreadCurrentThreadName + i = + i)
}
ConsoleWriteLine(ThreadCurrentThreadName + has finished)
}
static void Main(string[] args)
{
ThreadCurrentThreadName = MainThread;
Thread newThread = new Thread(new ThreadStart(TestThreadThreadFuncOne))
newThreadName = NewThread;
for (int j = ; j < ; j++)
{
if (j == )
{
newThreadStart()
newThreadJoin()
}
else
{
ConsoleWriteLine(ThreadCurrentThreadName + j = + j)
}
}
ConsoleRead()
}
}
}
下面是测试的结果
结论从测试中我们可以很清楚的看到MainThread在NewThreadJoin被调用后被阻塞直到NewThread
执行完毕才继续执行