为了账号安全,请及时绑定邮箱和手机立即绑定

揭开这个黑箱:线程到底是什么东西?

如果你对软件开发感兴趣,从你正在读这篇文章来看,你肯定已经遇到过线程的概念。也许你以前并没有太关注它,你可能仍然对此不太了解。然而,在这篇文章中,你将了解线程的定义,它的工作原理是什么,以及为什么它在软件开发领域如此重要。

流程

为了更好地理解线程,首先了解进程的概念将有助于我们更好地理解线程。运行中的程序称为进程。例如,Word、Excel或其他任何应用程序在未运行时称为程序,而一旦运行,它们就被称为进程。进程最初只有一个线程,这个线程被称为主线程。其他线程是在程序运行的过程中由系统函数创建的。

在计算机科学中,进程被定义为已加载到内存并在处理器(CPU)上运行的程序。当它们未在磁盘上运行时,这些应用程序被定义为程序。程序(可执行文件“.exe”)本身是一组静止的指令,而进程则是对这些指令的实际执行。

线程帖

线程是像方法一样的程序片段。
这些程序片段在完成某个任务后开始执行它们的职责。
一旦这些线程完成任务,它们就会继续努力工作。
它们可以执行某些任务。
当我们创建一个软件项目时,我们首先创建一个线程。
我们称这个线程为主线程。主线程不仅控制程序流程,还允许工作线程同时运行。这些工作线程指的是除了主线程外的其他线程。
在计算机中,当我们运行一个应用程序时,该应用程序会被加载到内存中并开始运行。
在执行过程中,应用程序变成一个进程。进程在一个或多个处理器上运行。
线程是在这些进程中执行的一系列指令。

多线程

这确保程序可以同时由多个线程执行,从而帮助程序更高效地运行,尤其是在多核处理器上。

我认为我们已经理论性地理解了线程和多线程的概念,现在让我们实际来看看如何用C#编程语言创建线程。

    static void Main(string[] args)//主线程  
     {  
         Console.WriteLine("这是主线程");  

         Thread thread1 = new(() => //这是工作线程  
         {  
             Console.WriteLine("这是工作线程");  
         });  

         thread1.Start();  
    }

如你所见,我们可以使用Thread类创建线程。这里的Main方法成为我们的主线程,我们称作thread1的线程则作为工作线程。为了运行线程,我们需要调用thread1.Start()方法,否则线程将不会启动。

线程ID

每个在C#中创建的线程都有一个线程标识。通过使用这个标识,我们可以更轻松地进行追踪和调试。

    Thread thread1 = new(() =>  
     {  
         Console.WriteLine("工作线程");  
         Console.WriteLine(System.Environment.CurrentManagedThreadId);  
         Console.WriteLine(AppDomain.CurrentDomain.Id);  
         Console.WriteLine(Thread.CurrentThread.ManagedThreadId);  
     });  
     thread1.Start();

当我们运行这段代码的时候,可以在控制台看到线程ID。

线程号

是否为后台

isBackground属性决定了一个线程是否会在后台运行。如果一个线程在后台运行,它会被视为依赖于主线程。这意味着当主线程结束时,后台线程也会自动终止。

此属性通常适用于后台运行的服务或长时间的任务。

    int i = 10;  
    Thread thread = new(() =>  
    {  
        while (i >= 0)  
        {  
            i--;  
            Thread.Sleep(1000);  
        }  
        Console.WriteLine("Worker Thread completed");  
    });  

    thread.IsBackground = false;  
    thread.Start();  
    Console.WriteLine("Main Thread completed");

后台任务

线程的状态

我们创建的线程有不同的状态,这些状态反映了线程当前的状态。

  • 运行中 → 表示线程正在活跃运行。
  • 停止请求 → 表示已请求停止该线程。
  • 挂起请求 → 表示已请求暂停线程。
  • 后台 → 表示线程在后台执行。
  • 未启动 → 表示线程尚未开始执行。
  • 已停止 → 表示线程已完成运行并终止。
  • 等待/睡眠/合并 → 表示线程正在等待其他线程,睡眠或处于合并状态中。
  • 已挂起 → 表示线程当前处于暂停状态。
  • 终止请求 → 表示已请求终止该线程。
  • 已终止 → 表示线程已被终止运行。
    int i = 10;  
    Thread 工作线程 = new Thread(() =>  
    {  
        while (i >= 0)  
        {  
            i--;  
            Thread.Sleep(1000); // 等待1秒  
        }  
        Console.WriteLine("工作线程已完成");  
    });  

    工作线程.Start();  
    System.Threading.ThreadState 状态 = System.Threading.ThreadState.WaitSleepJoin;  

    while (true)  
    {  
        if (工作线程.ThreadState == System.Threading.ThreadState.Stopped)  
        {  
            break;  
        }  
        if (状态 != 工作线程.ThreadState)  
        {  
            状态 = 工作线程.ThreadState;  
            Console.WriteLine($"当前线程状态: {状态}");  
        }  
    }

线程状态

关于线程的讨论到这里就结束了。你可以把它看作是关于线程的入门文章。在接下来的文章中,我们将更深入地探讨线程的相关内容。

希望这篇文章对你有帮助。继续关注新文章,了解更多知识吧!

参考来源

线程是什么?详细的线程解析在这篇文章中,我将尝试详细解析线程。与大多数文章不同的是,我将通过编程语言的角度……devnot.com
软件架构和设计模式 C#, .NET Core, Asp.NET Core, LINQ, Web 服务, jQuery, T-SQL, SQL Server, Ajax, OOP, 设计模式, 网址: www.gencayyildiz.com
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消