博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#多线程Thread.Join()的详解
阅读量:4348 次
发布时间:2019-06-07

本文共 1818 字,大约阅读时间需要 6 分钟。

class TestThread    {        private static void FirstThreadFun()        {            for (int i = 0; i < 10; i++)            {                Console.WriteLine(Thread.CurrentThread.Name + "   i =  " + i);                            }            Console.WriteLine(Thread.CurrentThread.Name + " 执行完毕");        }static void Main(string[] args)        {            //程序调用了Main()函数时,就起动了一个进程,同时也启动了一个线程[这个线程就是主线程].            Thread.CurrentThread.Name = "MainThread";                          //创建第一个线程            Thread firstThread = new Thread(new ThreadStart(TestThread.FirstThreadFun));            //取名为 firstThread            firstThread.Name = "firstThread";            for (int z = 0; z < 20; z++)            {                if (z == 10)                {                    firstThread.Start();                    firstThread.Join();                }                else                {                    Console.WriteLine(Thread.CurrentThread.Name + "   z =  " + z);                }            }            Console.Read();        }    }}

运行结果:

 

 

总结:

1.任何程序在执行时,至少有一个主线程。 

2.firstThread.Start()启动了一个线程后,用firstThread.Join()这个方法加入一个线程[即:暂停了主线程的运行],那么就会马上执行这个新加入的线程

3.Join 就是加入的意思,也就是说新创建的线程加入到进程中,并马上执行

4.如果只是 firstThread.Start(),把 firstThread.Join()方法注释掉会是什么结果?

下面的图是运行结果:

 

从运行结果可以看出:

1.如果只是 firstThread.Start(),注释掉 firstThread.Join()这个方法后,主线程并不会暂停[也就是说,firstThread 线程并不会马上执行]

2.所以要想一个线程在启动后就马上执行,必须调用 Thread.Join()方法. 

3.到这里,Thread.Join()这个方法的作用也就明显了:当调用了 Thread.Join()方法后,当前线程会立即被执行,其他所有的线程会被暂停执行.

当这个线程执行完后,其他线程才会继续执行.

 

我们通过其中提供的Thread类来创建和控制线程,ThreadPool类用于管理线程池等。

(此外还提供解决了线程执行安排,死锁,线程间通讯等实际问题的机制。)
Thread类有几个至关重要的方法,描述如下:
Start():启动线程;
Sleep(int):静态方法,暂停当前线程指定的毫秒数; 
Abort():通常使用该方法来终止一个线程;
Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复; 
Resume():恢复被Suspend()方法挂起的线程的执行; 

 
 

转载于:https://www.cnblogs.com/lfxiao/p/6709312.html

你可能感兴趣的文章
Linux----常用操作
查看>>
sequence
查看>>
Delphi错误:Stack overflow的解决方法
查看>>
取消chrome(谷歌浏览器)浏览器下最小字体限制
查看>>
模板方法模式
查看>>
什么是ECC内存?
查看>>
使用Visual Studio 2013进行UI自动化测试
查看>>
13-集体照
查看>>
读了曾国藩家书,,心态逐渐平和起来。搞技术的如果缺乏信念的指引,生活会很乏味无聊!...
查看>>
前端javascript 错误 Uncaught SyntaxError: Unexpected token ILLEGAL
查看>>
Selenium WebDriver问题--无法打开Chrome浏览器
查看>>
2017.4.18 Java的Integer与int互转
查看>>
小程序接受返回数组的坑
查看>>
echart.js的使用
查看>>
linux7.2系统中安装Nmon并使用
查看>>
HTML转换为PDF
查看>>
邮件加密和签名
查看>>
自己动手写一个单链表
查看>>
生产者与消费者(综合案例)
查看>>
集团信息化之路——关于网络电子採购系统的需求报告
查看>>