Thread.Join()方法的理解
今天是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。
Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates
有两个主要问题:1.什么是the calling thread?
2.什么是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哈哈~
好了,前面分析完了,现在来看测试用例吧:
Titleusing 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 = 0; i < 10; 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 = 0; j < 20; j++)
{
if (j == 10)
{
newThread.Start();
newThread.Join();
}
else
{
Console.WriteLine(Thread.CurrentThread.Name + " j = " + j);
}
}
Console.Read();
}
}
}
Thread.Join()方法的理解相关推荐
- python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解
看了oschina上的两个代码,受益匪浅.其中对join()方法不理解,看python官网文档的介绍: join([timeout]):等待直到进程结束.这将阻塞正在调用的线程,直到被调用join() ...
- 高并发编程-Thread#join方法的使用及使用场景分析
文章目录 含义 方法及示例 void join() void join(long millis) join(long millis, int nanos) 使用场景分析 含义 翻看下源码的注释: Wa ...
- java并发编程之thread.join()方法详解
thread.join()方法的作用:保证线程的执行结果的可见性.原理是通过阻塞主线程实现的. 代码Demo如下: public class ThreadJoinDemo {public static ...
- Thread.Join()用法的理解
指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行 比如 1using System; 2 3namespace TestThreadJoin 4{ ...
- Java中join()方法的理解
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join ...
- python 的 Thread.join方法
一.join 方法的主要作用是阻塞, 阻塞的对象是谁? 答:阻塞的对象是主线程,可以达到控制主线程什么时候结束的作用. 1.没有join 此时主线程和子线程相当于齐头并进,主线程不会等待子线程执行完了 ...
- python 线程类 threading.Thread.join() 方法 (自闭,不让别人进来了)
def join(self, timeout=None):"""Wait until the thread terminates. 等待线程终止.This blocks ...
- 多线程--关于Thread的join方法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.Thread的join方法. 二.方便理解引入例子 1.代码示例 2.输出结果 总结 一.Thread的join方法. ...
- Thread系列之Thread.Join()
Thread.Join()方法,顾名思义,在一个线程中加入一些东西. MSDN上解释其作用为:阻塞 "调用线程" 直到某个线程结束. 这个翻译过来的解释有点晦涩.举个例子如下: s ...
最新文章
- MySQL学习----各种字符的长度总结
- rviz学习笔记(一)——Markers: Sending Basic Shapes (C++) 发送基础形状
- 报告鼠标和键盘事件的一个程序(转)
- android adb恢复出厂设置,android开发分享擦除数据/通过ADB恢复出厂设置
- IE6/IE7下:inline-block不兼容的问题
- Python应用实战系列(一)-正则表达式大全
- bzoj千题计划241:bzoj3864: Hero meet devil
- C#趣味程序----分数之和
- 58年前,这3个人在“撕逼”中拿下诺贝尔奖!一起研究DNA的女科学家却痛苦去世.........
- Jira更换mysql数据库_JIRA6.0更换数据库到MYSQL
- mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案
- Scrum And Teamwork
- hp chromebook11 linux,又有18款Chromebook即将支持Linux应用
- DigitalClock的替代者TextClock
- python excel库 linux_python 在linux下读取 .xlsx
- Gremlin发布混沌工程实验平台免费版,开放了“故障即服务”功能
- 采用POD以及DMD方法实现圆柱绕流流动分解(DMD篇)
- 4个可以下载IEEE论文、计算机论文的网站
- Windows API GetLastError()函数返回值含义解释
- 今天是愚人节。(Today is April Fools' Day.)网页需要倾斜o(∩_∩)o
热门文章
- 怎么把桌面计算机放到快速启动栏,怎么把桌面图标放到快速启动栏
- arduino智能浇花系统_创新成果 | 养花神器——智能浇花机
- 检测网络是否稳定的计算机命令,如何查看自己的网络是否稳定
- python语言的单行注释以井号开头_【学习】Python语言入门
- java 字符串指定编码输出_java对字符的编码处理
- eureka注册中心HA集群搭建
- 最优化学习笔记(五)——牛顿法(多维数据)
- 5G零售行业应用白皮书
- 客座编辑:崔辰州(1976-),男,博士,中国科学院国家天文台研究员、硕士生导师,国家天文台信息与计算中心主任...
- 作者:王长波,华东师范大学教授、博士生导师、软件学院常务副院长。