可以参考微软技术文档https://msdn.microsoft.com/en-us/library/system.threading.thread(v=vs.110).aspx
Thread 方法很多,我们进行一下归纳,然后具体讲解一些常用的方法。
一、Thread 全部方法
在调用此方法的线程上引发ThreadAbortException,以开始终止此线程的过程。 调用此方法通常会终止线程
| |
AllocateDataSlot | 在所有的线程上分配未命名的数据槽
|
AllocateNamedDataSlot | 在所有线程上分配已命名的数据槽
|
BeginCriticalRegion | 通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未处理的异常 的影响可能会危害应用程序域中的其他任务 |
BeginThreadAffinity | 通知宿主托管代码将要执行依赖于当前物理操作系统线程的标识的指令 |
EndThreadAffinity | 通知宿主托管代码已执行完依赖于当前物理操作系统线程的标识的指令
|
Equals | 确定两个Object实例是否相等
|
FreeNamedDataSlot | 为进程中的所有线程消除名称与槽之间的关联
|
GetApartmentState | 返回一个ApartmentState值,该值指示单元状态 |
GetCompressedStack | 返回一个 CompressedStack 对象,该对象可用于捕获当前线程的堆栈
|
GetData | 在当前线程的当前域中从当前线程上指定的槽中检索值 |
GetDomain | 返回当前线程正在其中运行的当前域
|
GetDomainID | 返回惟一的应用程序域标识符 |
GetHashCode | 返回当前线程的哈希代码
|
GetNamedDataSlot | 查找已命名的数据槽
|
Interrupt | 中断处于WaitSleepjoin线程状态的线程
|
Join | 阻止调用线程,直到某个线程终止时为止 |
MemoryBarrier | 同步内存。其效果是将缓存内存中的内容刷新到主内存中,从而使处理器能执行 当前线程
|
ReferenceEquals | 确定指定的Object实例是否是相同的实例
|
ResetAbort | 取消为当前线程请求的Abort |
Resume | 继续已挂起的线程
|
SetApartmentState | 在线程启动前设置其单元状态
|
SetCompressedStack | 对当前线程应用捕获的 CompressedStack |
SetData | 在当前正在运行的线程上为此线程的当前域在指定槽中设置数据
|
Sleep | 将当前线程阻止指定的毫秒数 |
SpinWait | 导致线程等待由 iterations 参数定义的时间量
|
Start | 使线程被安排进行执行
|
Suspend | 挂起线程,或者如果线程已挂起,则不起作用
|
ToString | 返回表示当前Object的String |
TrySetApartmentState | 在线程启动前设置其单元状态 |
VolatileRead | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的 任何处理器写入的最新值
|
VolatileWrite | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见 |
二、Thread常用的方法解析
常用方法:Start(),Abort(),Suspend(),Resume(), Join(),Interrupt()以及静态方法Sleep()和ResetAbort()
(1)Start()开始线程。调用Start()开始一个线程。
一旦线程由于调用 Start 而离开 Unstarted 状态,那么它将无法再返回到 Unstarted 状态(最后被销毁)。
(2)Abort()和Thread.ResetAbort() 线程销毁及取消销毁。
调用线程的Abort()实例方法可以销毁目标线程实例,调用Thread.ResetAbort() 来取消线程销毁。
(3)Sleep()阻塞线程
调用Sleep()方法使当前线程放弃剩余时间片,立即挂起(阻塞)并且在指定时间内不被调度。
应用实例:轮询休眠while (!proceed) Thread.Sleep (x); // "轮询休眠!"
(4)Suspend()与Resume()线程的挂起和唤醒
可结合Suspend()与Resume()来挂起和唤醒线程,这两方法已过时。当对某线程调用Suspend()时,系统会让该线程执行到一个安全点,然后才实际挂起该线程(与Thread.Sleep()不同, Suspend()不会导致线程立即停止执行)。无论调用了多少次 Suspend(),调用Resume()均会使另一个线程脱离挂起状态,并导致该线程继续执行。
(5)Join()阻塞线程
在线程A中调用线程B的Join()实例方法。在继续执行标准的 COM 和 SendMessage 消息泵处理期间,线程A将被阻塞,直到线程B终止为止。