如果你对软件开发感兴趣,从你正在读这篇文章来看,你肯定已经遇到过线程的概念。也许你以前并没有太关注它,你可能仍然对此不太了解。然而,在这篇文章中,你将了解线程的定义,它的工作原理是什么,以及为什么它在软件开发领域如此重要。
流程为了更好地理解线程,首先了解进程的概念将有助于我们更好地理解线程。运行中的程序称为进程。例如,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共同学习,写下你的评论
评论加载中...
作者其他优质文章