博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程的等待方法:join
阅读量:6902 次
发布时间:2019-06-27

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

其实多线程最复杂的地方在于不同线程间的同步问题,这其中会涉及到先后执行问题、共享变量问题等。这篇文章我们主要来开个头,看一下join方法。

 

[csharp]
  1. using System;  
  2. using System.Threading;  
  3.   
  4. namespace Chapter1.Recipe3  
  5. {  
  6. class Program  
  7. {  
  8. static void Main(string[] args)  
  9. {  
  10. Console.WriteLine("Starting program...");  
  11. Thread t = new Thread(PrintNumbersWithDelay);  
  12. t.Start();  
  13. t.Join(); // 等待t线程完成后,主线程才继续执行!  
  14. Console.WriteLine("Thread completed");  
  15. }  
using System;using System.Threading;namespace Chapter1.Recipe3{class Program{static void Main(string[] args){Console.WriteLine("Starting program...");Thread t = new Thread(PrintNumbersWithDelay);t.Start();t.Join(); // 等待t线程完成后,主线程才继续执行!Console.WriteLine("Thread completed");}
[csharp]
  1. static void PrintNumbersWithDelay()  
  2. {  
  3. Console.WriteLine("Starting...");  
  4. for (int i = 1; i < 10; i++)  
  5. {  
  6. Thread.Sleep(2000);  
  7. Console.WriteLine(i);  
  8. }  
  9. }  
  10. }  
  11. }  
static void PrintNumbersWithDelay(){Console.WriteLine("Starting...");for (int i = 1; i < 10; i++){Thread.Sleep(2000);Console.WriteLine(i);}}}}

 

其实join方法的意义很简单,主线程main在t没有执行完毕前都会保持阻塞状态(类似于sleep状态),这样做的好处是保证了线程t在join前一定会执行完毕,确保了main和t线程的先后逻辑关系。

你可能感兴趣的文章
暴力操作节点
查看>>
java多线程关键字volatile的使用
查看>>
Aptana下Django1.6以后的项目模板结构改造
查看>>
LoaderManager使用具体解释(四)---实例:AppListLoader
查看>>
软件系统的架构设计
查看>>
poj1159--Palindrome(dp:最长公共子序列变形 + 滚动数组)
查看>>
Codeforces #282 div 1 C Helping People 题解
查看>>
Java华氏转摄氏
查看>>
centos6.8服务器配置之编译安装PHP、配置nginx
查看>>
ddddddd
查看>>
Android 开发之 ---- 底层驱动开发(一)
查看>>
分享到朋友圈实现
查看>>
SQL Server 用链接服务器 同步SqlServer与MySQL
查看>>
Android程序的打包和安装
查看>>
Android内存优化6 了解Android是如何管理App内存
查看>>
SpringBoot2 添加应用拦截器
查看>>
es删除文档或者删除索引
查看>>
swift可选值总结
查看>>
深入理解Java虚拟机06--虚拟机字节码执行引擎
查看>>
C# 委托和事件,简单示例说明问题
查看>>