C#多线程JOIN方法初探
2014-03-09 21:21
218 查看
[说明:刚接触多线程时,弄不明白Join()的作用,查阅了三本书,都不明不白。后来经过自己的一番试验,终于弄清了Join()的本质。大家看看我这种写法是否易懂,是否真的写出了Join()的本质,多提宝贵意见。]
Thread类的Join()方法能够将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,线程A将插入线程B之前,直到线程A执行完毕后,才会继续执行线程B。
试一试:线程的插入
运行结果如下,你能分析清楚为什么吗?
由运行结果可以看出,一开始两个线程交替进行,当线程B执行到语句“ThreadA.Join()”时,线程A被插入到线程B之前,两个线程合并到一起,变为顺序执行,直到执行完线程A中的所有语句,才去执行线程B中剩余的语句。
换句话说,当我们在线程B中调用ThreadA.Join()时,该方法只有在线程ThreadA执行完毕之后才会返回。Join()函数还可以接受一个表示毫秒数的参数,当达到指定时间后,如果线程A还没运行完毕,那么Join函数将返回,这时线程A和线程B再次处于交替运行状态中。
Thread类的Join()方法能够将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,线程A将插入线程B之前,直到线程A执行完毕后,才会继续执行线程B。
试一试:线程的插入
//《C#初学课堂》 //注意添加命名空间 using System.Threading; static void Main(string[] args) { //线程A Thread ThreadA = new Thread(delegate() { for (int i = 0; i <= 100000000; i++) { if (i % 1000000 == 0) { Console.Write('A'); } } }); //线程B Thread ThreadB = new Thread(delegate() { for (int i = 0; i <= 50000000; i++) { if (i % 1000000 == 0) { Console.Write('B'); } } //在这里插入线程A ThreadA.Join(); for (int i = 0; i <= 50000000; i++) { if (i % 1000000 == 0) { Console.Write('b'); } } }); //启动线程 ThreadA.Start(); ThreadB.Start(); }
运行结果如下,你能分析清楚为什么吗?
由运行结果可以看出,一开始两个线程交替进行,当线程B执行到语句“ThreadA.Join()”时,线程A被插入到线程B之前,两个线程合并到一起,变为顺序执行,直到执行完线程A中的所有语句,才去执行线程B中剩余的语句。
换句话说,当我们在线程B中调用ThreadA.Join()时,该方法只有在线程ThreadA执行完毕之后才会返回。Join()函数还可以接受一个表示毫秒数的参数,当达到指定时间后,如果线程A还没运行完毕,那么Join函数将返回,这时线程A和线程B再次处于交替运行状态中。
相关文章推荐
- C#多线程JOIN方法初探
- Firebug+Firefox 调试方法初探(转载)
- Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
- WebApi 4大方法初探 get、post、put、delete
- 聚类方法初探
- Hibernate初探之一对多映射 及 myeclipse自动生成hibernate文件方法
- iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- 初探反射(二)之晚期绑定动态调用实体方法
- C#多线程JOIN方法初探
- Android下Activity结束(finish())之后没有释放内存问题的解决方法初探
- TinyMCE在线编辑器使用方法初探
- 客户端限制上传文件大小的方法初探
- Python抓取网页&批量下载文件方法初探(正则表达式+BeautifulSoup) (转)
- xcode 4.2使用方法初探--控制台程序指定参数
- iOS动态性 运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- TinyMCE在线编辑器使用方法初探
- 初探vs2010的使用方法
- Android开发 - ActivityLifecycleCallbacks使用方法初探
- Java toString()方法初探