Thread.Join()方法,顾名思义,在一个线程中加入一些东西。

MSDN上解释其作用为:阻塞 “调用线程” 直到某个线程结束。

这个翻译过来的解释有点晦涩。举个例子如下:

static void  Main()

{

Thread t=new Thread(new ThreadStart(ThreadMethod));

t.Start();

t.Join();

Console.WriteLine("I am Main Thread");

Console.Read();

}

void ThreadMethod()

{

...

}

从上面的代码中,我们可以看到存在两个线程:主线程和线程t

回到Join,这里所说的调用方就是主线程,主线程调用线程t的Join方法,导致主线程阻塞,直到t线程执行完毕,才返回到主线程中。

简单理解,在主线程中调用t.Join(),也就是在主线程中加入了t线程的代码,必须让t线程执行完毕之后,主线程(调用方)才能正常执行。

代码示例:

代码

staticvoid Main(string[] args)
{
// AutoResetEvent autoEvent = new AutoResetEvent(false);
Thread regularThread =new Thread(new ThreadStart(ThreadMethod));
regularThread.Start();
ThreadPool.QueueUserWorkItem(new WaitCallback(WorkMethod1),regularThread);

Console.WriteLine("i am main thread!");
// regularThread.Join();
Console.WriteLine("i am main thread!");
// autoEvent.WaitOne();
Console.Read();
}
staticvoid ThreadMethod()
{
for (int i =0; i <5; i++)

{
Console.WriteLine("ThreadOne 第 {0} 次执行,executing ThreadMethod,is {1} from the thread pool.",i+1, Thread.CurrentThread.IsThreadPoolThread ?"" : "not");
Thread.Sleep(1000);
}

}
staticvoid WorkMethod1(object stateInfo)
{
Console.WriteLine("ThreadTwo,executing WorkMethod,is {0} form the thread pool.", Thread.CurrentThread.IsThreadPoolThread ?"" : "not");
// ((AutoResetEvent)stateInfo).Set();
((Thread)stateInfo).Join();
for (int i =0; i <5; i++)
{
Console.WriteLine("ThreadTwo 第 {0}次执行,executing WorkMethod,is {1} form the thread pool.",i+1, Thread.CurrentThread.IsThreadPoolThread ?"" : "not");
}

}

代码中,存在三个线程:主线程、regularThread和线程池中的一个线程。在线程池中的线程中调用了regularThread.Join()方法;

执行结果:

可以看到线程池中线程循环中的内容在regularThread的内容执行完毕之后才执行。

转载于:https://www.cnblogs.com/xyqCreator/archive/2013/01/10/2854446.html

Thread系列之Thread.Join()相关推荐

  1. Java 中Thread的sleep、join、yield方法解析

    1.Thread中sleep方法作用是使当前线程等待,其他线程开始执行,如果有线程锁,sleep不会让出锁 没有加锁代码如下: public class SynchronizedSleepMethod ...

  2. Thread类中的join方法

    package charpter06; //类实现接口 public class Processor implements Runnable { // 重写接口方法 @Override public ...

  3. Thread系列——Thread.Sleep(0)

    转载自:http://www.cnblogs.com/ATually/archive/2010/10/21/1857261.html 线程这一概念,可以理解成进程中的一个小单元.这个单元是一个独立的执 ...

  4. Android Thread第二次Thread.start()报错的疑问

    为什么80%的码农都做不了架构师?>>>    网上说Thread不需要stop()的原因是因为运行到尾部就会自动释放,而代码: Thread myThread = new Thre ...

  5. php5.6non thread safe 区别,PHP版本Non Thread Safe和Thread Safe如何选择?区别是什么?

    PHP版本分为Non Thread Safe和Thread Safe,Non Thread Safe是指非线程安全,Thread Safe是指线程安全,区别是什么?如何选择? Non Thread S ...

  6. Thread.yield()和Thread.sleep(0)

    关于Thread.yield()和Thread.sleep(0)的语义问题真是一个让人挠头的问题,翻了好多资料,在java6语言规范中看到了一段这样的描述: 重点在红框中,简而言之就是:sleep(0 ...

  7. 【java】Thread.Sleep 与 Thread.onSpinWait

    1.概述 转载:[java]Thread.Sleep 与 Thread.onSpinWait 2.Thread.Sleep 一般情况下,我们让线程等待一段时间都是使用Thread.sleep()命令. ...

  8. Thread.interrupted()与Thread.currentThread().isInterrupted()区别

    背景 今天在研究ThreadPoolExecutor源码时,在runWorker(Worker w)的方法中有一个判断条件分别用到了Thread.interrupted()和Thread.curren ...

  9. Thread.currentThread().interrupt()和Thread.interrupted()和Thread.currentThread().isInterrupted()

    Thread.interrupted() 可以返回当前标志位并使标志位为false Thread.currentThread().interrupt() 可以使标志位置为true Thread.cur ...

最新文章

  1. 系统架构师学习笔记_第五章(下)_连载
  2. 转从Qt4 到Qt5的变化
  3. 二数和,三数和,四数和的优化总结
  4. 成功解决ValueError: Shape of passed values is (33, 1), indices imply (33, 2)
  5. 预算为0如何拉用户?类类教你5个独门绝技,并说说一些陷阱!
  6. VTK:BrownianPoints布朗点用法实战
  7. Jquery Ajax 登录,服务端分别为 aspx,ashx,asmx
  8. 怎么解决缺少java.doc_java 生成doc帮助文档时出现的问题
  9. 设计师经常逛的网站?
  10. Qt编写OpenMP程序--双循环
  11. DanmuManager 一个简单的弹幕工具
  12. android维文字体下载,Badam维汉输入法
  13. 宾馆客房管理系统Mysql数据库课程设计
  14. Linux下使用和配置magick
  15. 面试软件测试总结(常见的面试问题)
  16. Html页面Js调用android本地相机和图片
  17. 微信小程序存在的风险_警惕,你的微信小程序可能面临着风险!
  18. opengl进行绿色屏幕抠图
  19. 8B/10B编码原理详解、Verilog实现及在JESD204B中的应用
  20. 白银价格转换器(美元/盎司-人民币/克)

热门文章

  1. 流程的python-读《流畅的python》第一天
  2. r语言和python-R语言和Python一块学习会弄混吗
  3. python自学网站推荐-杭州python自学网站
  4. python可以做什么开发-python适合做什么开发_python未来发展怎么样
  5. python编程语言能干什么-python编程语言的优势与劣势--python能干啥
  6. python教程第四版pdf下载-笨办法学python第四版 电子书(pdf格式)
  7. python视频课程推荐-《Python从小白到大牛》全集视频课程介绍
  8. python与人工智能编程-总算明白python人工智能编程入门案例
  9. python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版
  10. 学python的基础-老司机学python篇:第一季(基础速过、机器学习入门)