C# 使用Thread类建线程

C# 使用Thread类建线程

目录

引言

线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。线程是我们程序常用的并行运行控制手段,进程可以是单线程也可以使多线程,这里我用C# 中的Thread类构建线程来简要地说一下线程的基础使用。

Thread类

Thread类位于System.Threading命名空间下,System.Threading命名空间提供一些可以进行多线程编程的类和接口。Thread类主要用于创建并控制线程、设置线程优先级并获取其状态。

启动线程

Thread类的使用确实方便,受到大部分人的喜爱。看下面代码通过定义myThread为线程对象,定义开始运行的函数为ThreadLoop,Priority属性定义其优先级,IsBackground=true置为后台线程,Name给线程取名。通过Start()方法启动线程。

c 复制代码
private void  Thread_Start()
{
           Thread myThread = new Thread(new ThreadStart(ThreadLoop))//指定线程函数
           {
               Priority= ThreadPriority.BelowNormal,//指定优先等级
               IsBackground = true,//可后台运行
               Name = "my_Thread"//线程名
           }; 
           //启动线程
           myThread .Start();
           
}
   


public void ThreadLoop()
{
   		//打印线程ID
           Console.Write($" myThread.ID:{myThread.ManagedThreadId}\n");
           //打印线程状态
           Console.Write($" myThread.state:{myThread.ThreadState}\n"); 
           //休眠
           thread.sleep(100);
           while(true)
           {
           }
}

优先级

优先级(Priority)指示线程的调度优先级。该类设置的优先级为枚举类型,可以设置也可以随时读取,其从低到高包括Lowest, BelowNormal, Normal, AboveNormal, Highest。

后台运行

通常主线程之外我们会定义为后台线程,即IsBackground = true。前台线程执行完后,不管后台线程有没有执行完毕,都会直接关闭后台进程。

线程状态

线程状态是以枚举位控制的方式表示的, System.Threading.ThreadState 包括有 10个状态

Running = 0x0,

StopRequested = 0x1,

SuspendRequested = 0x2,

Background = 0x4,

Unstarted = 0x8,

Stopped = 0x10,

WaitSleepJoin = 0x20,

Suspended = 0x40,

AbortRequested = 0x80,

Aborted = 0x100

通常我们用Start()方法启动线程;使用Abort()方法来停止线程;通过thread.sleep()方法来进入休眠(WaitSleepJoin)状态;通过Suspend()来挂起线程;通过Resume()方法来恢复继续挂起的线程。

线程名称

线程名(Name)顾名思义,线程的名字,用来区分不同的线程。

线程ID

线程ID(ManagedThreadId)为托管线程的唯一标识符,编号。

最后

此篇以最简要地概括的线程的基本使用,包括了大部分常用操作。在实际运用中如何配合使用,以及解决线程冲突、时间控制、卡顿、多线程共享等问题是需要更深入的分析和添加其它方法综合运用的。

相关推荐
武藤一雄1 小时前
C# 设计模式大全(第一弹|7种)
microsoft·设计模式·微软·c#·.net·.netcore
格林威2 小时前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
向上的车轮3 小时前
熟悉C#如何转TypeScript——SDK与包引用
开发语言·typescript·c#
CSharp精选营4 小时前
Dispose 不释放?C# 资源泄漏的 3 种隐蔽场景排查
c#·资源泄漏
unicrom_深圳市由你创科技6 小时前
LabVIEW和C#在工业控制中的应用差异是什么?
fpga开发·c#·labview
唐青枫7 小时前
C#.NET Consul + Steeltoe 深入解析:服务注册发现、健康检查与微服务接入
c#·.net
czhc11400756637 小时前
winform 330 跨线程 异步
wpf·线程·winform
DowneyJoy7 小时前
【Unity3D补充知识点】常用数据结构分析-集合(List<T>)
数据结构·unity·c#·list
格林威7 小时前
Baumer相机铝型材表面划伤长度测量:实现损伤量化评估的 5 个关键技术,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
DowneyJoy8 小时前
【Unity3D补充知识点】常用数据结构分析-数组(Array)
数据结构·unity·c#