c#

位置:IT落伍者 >> c# >> 浏览文章

关于C#中Thread.Join()的一点理解


发布日期:2022年07月11日
 
关于C#中Thread.Join()的一点理解

今天是第一次在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

执行完毕才继续执行

               

上一篇:使用ADO.NET2.0提升数据交互性能

下一篇:.NET 委托