陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

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

 

  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");
}

  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线程的先后逻辑关系。

posted on   宏宇  阅读(397)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2009-06-27 flah体验
2007-06-27 一个老程序员的工作经历(转,看完后深有感触)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示