您当前的位置:首页 >  关注  > 正文
Csharp.NET单线程、多线程、Thread类、源码 独家焦点
来源:智道知道     时间:2023-02-21 08:02:12

一、概述

单线程就类似是一个干活多线程就类似是多个人同时干活

C#里面一个Form界面就是一个线程,也就是这个界面的主线程,如果想在这个界面同时执行多个独立的任务,那么就需要创建多个子线程去各自执行各自的任务。


(相关资料图)

二、Thread类

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

Thread类的常用属性及说明

Thread:创建和控制线程,设置其优先级并获取其状态。

ThreadAbortException:当对 Abort(Object)方法发出调用时引发的异常。此类不能被继承。

ThreadExceptionEventArgs:为 ThreadException 事件提供数据。

ThreadInterruptedException:中断处于等待状态的 Thread 时引发的异常。

ThreadLocal:提供数据的线程本地存储。

ThreadPool:提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。

ThreadPoolBoundHandle:表示已绑定到系统线程池的 I/O 句柄,并使低级别组件能够接收异步 I/O 操作的通知。

ThreadStartException:当基础操作系统线程已启动但该线程尚未准备好执行用户代码前,托管线程中出现错误,则会引发异常。

ThreadStateException:当 Thread 处于对方法调用无效的 ThreadState 时引发的异常。

Timeout:包含指定无限期超时间隔的常数。此类不能被继承。

Timer:提供以指定的时间间隔对线程池线程执行方法的机制。此类不能被继承。

Volatile:包含用于执行可变内存操作的方法。

WaitHandle:封装等待对共享资源进行独占访问的操作系统特定的对象。

WaitHandleCannotBeOpenedException:当尝试打开不存在的系统互斥体、信号量或事件等待句柄时引发的异常。

WaitHandleExtensions:提供针对 wait 句柄使用 safe 句柄的简便方法。

ApartmentState:获取或设置该线程的单元状态

CurrentContext:获取线程正在其中执行的当前上下文

CurrentThread:获取当前线程正在运行的线程

IsAlive:获取一个值,该值指示当前线程的执行状态

ManagedThreadld:获取当前托管线程的唯一标识符

Name:获取或设置线程的名称

Priority:获取或设置一个值,改制指示线程的调度优先级

ThreadState:获取一个值,该值包含当前线程的状态

Abort:在调用该方法的线程上引发ThreadAbortException,以开始终止该线程的过程。调用该方法通常会终止线程

GetApartmentState:返回一个ApartmentState值,该值指示单元状态

GetDomain:返回当前线程正在其中运行的当前域

GetDomainID:返回唯一的应用程序标识符

Interrupt:中断处于WaitSleepJoin线程状态的线程

Join:阻止调用线程,直到某个线程终止时为止

ResetAbort:取消为当前线程请求的Abort

Resume:继续已挂起的线程

SetpartmentState:在线程启动前设置其单元状态

Sleep:将当前线程阻止指定的毫秒数

SpainWait:导致线程等待由iterations参数定义的时间量

Start:使线程被安排进行执行

Suapent:挂起线程,或者如果线程已挂起,则不起作用

VolatileRead:读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值

VolatileWrite:立即向字段写入一个值,一边该值对计算机中的所有处理器都可见

三、例子:以下代码是窗体打开的时候创建3个线程

第一个线程是永远执行下去的,每间隔3秒执行一次文件拷贝

第二个线程是无参数的

第三个线程是有参数的,有参数的线程传入的是对象,可以把全部值放在一个类里面进行传入,在开发中经常会用到有参数的线程

四、线程生命周期

线程生命周期开始是在 System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时。

线程状态:

(1)未启动状态(Unstarted):当线程实例被创建但 Start 方法未被调用时的状况。

(2)就绪状态(Runnable):当线程准备好运行并等待 CPU 周期时的状况。

(3)运行状态(Running):线程已经调用start运行

(4)不可运行状态():下面的几种情况下线程是不可运行的:

已经调用 Sleep 方法

已经调用 Wait 方法

通过 I/O 操作阻塞

(5)死亡状态:当线程完成其任务是,线程进入死亡、终止、中止状态。

总结:线程的作用是方便完成多任务同时进行又不影响主线程的运行,现实开发的多任务场景都需要用到线程。

标签:

相关新闻

X 关闭

X 关闭

精彩推荐