关于C#中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()方法的理解相关推荐

  1. python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解

    看了oschina上的两个代码,受益匪浅.其中对join()方法不理解,看python官网文档的介绍: join([timeout]):等待直到进程结束.这将阻塞正在调用的线程,直到被调用join() ...

  2. 高并发编程-Thread#join方法的使用及使用场景分析

    文章目录 含义 方法及示例 void join() void join(long millis) join(long millis, int nanos) 使用场景分析 含义 翻看下源码的注释: Wa ...

  3. java并发编程之thread.join()方法详解

    thread.join()方法的作用:保证线程的执行结果的可见性.原理是通过阻塞主线程实现的. 代码Demo如下: public class ThreadJoinDemo {public static ...

  4. Thread.Join()用法的理解

    指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行      比如  1using System;  2  3namespace TestThreadJoin  4{ ...

  5. Java中join()方法的理解

    thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. t.join ...

  6. python 的 Thread.join方法

    一.join 方法的主要作用是阻塞, 阻塞的对象是谁? 答:阻塞的对象是主线程,可以达到控制主线程什么时候结束的作用. 1.没有join 此时主线程和子线程相当于齐头并进,主线程不会等待子线程执行完了 ...

  7. python 线程类 threading.Thread.join() 方法 (自闭,不让别人进来了)

    def join(self, timeout=None):"""Wait until the thread terminates. 等待线程终止.This blocks ...

  8. 多线程--关于Thread的join方法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.Thread的join方法. 二.方便理解引入例子 1.代码示例 2.输出结果 总结 一.Thread的join方法. ...

  9. Thread系列之Thread.Join()

    Thread.Join()方法,顾名思义,在一个线程中加入一些东西. MSDN上解释其作用为:阻塞 "调用线程" 直到某个线程结束. 这个翻译过来的解释有点晦涩.举个例子如下: s ...

最新文章

  1. MySQL学习----各种字符的长度总结
  2. rviz学习笔记(一)——Markers: Sending Basic Shapes (C++) 发送基础形状
  3. 报告鼠标和键盘事件的一个程序(转)
  4. android adb恢复出厂设置,android开发分享擦除数据/通过ADB恢复出厂设置
  5. IE6/IE7下:inline-block不兼容的问题
  6. Python应用实战系列(一)-正则表达式大全
  7. bzoj千题计划241:bzoj3864: Hero meet devil
  8. C#趣味程序----分数之和
  9. 58年前,这3个人在“撕逼”中拿下诺贝尔奖!一起研究DNA的女科学家却痛苦去世.........
  10. Jira更换mysql数据库_JIRA6.0更换数据库到MYSQL
  11. mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案
  12. Scrum And Teamwork
  13. hp chromebook11 linux,又有18款Chromebook即将支持Linux应用
  14. DigitalClock的替代者TextClock
  15. python excel库 linux_python 在linux下读取 .xlsx
  16. Gremlin发布混沌工程实验平台免费版,开放了“故障即服务”功能
  17. 采用POD以及DMD方法实现圆柱绕流流动分解(DMD篇)
  18. 4个可以下载IEEE论文、计算机论文的网站
  19. Windows API GetLastError()函数返回值含义解释
  20. 今天是愚人节。(Today is April Fools' Day.)网页需要倾斜o(∩_∩)o

热门文章

  1. 怎么把桌面计算机放到快速启动栏,怎么把桌面图标放到快速启动栏
  2. arduino智能浇花系统_创新成果 | 养花神器——智能浇花机
  3. 检测网络是否稳定的计算机命令,如何查看自己的网络是否稳定
  4. python语言的单行注释以井号开头_【学习】Python语言入门
  5. java 字符串指定编码输出_java对字符的编码处理
  6. eureka注册中心HA集群搭建
  7. 最优化学习笔记(五)——牛顿法(多维数据)
  8. 5G零售行业应用白皮书
  9. 客座编辑:崔辰州(1976-),男,博士,中国科学院国家天文台研究员、硕士生导师,国家天文台信息与计算中心主任...
  10. 作者:王长波,华东师范大学教授、博士生导师、软件学院常务副院长。