多线程总结之旅(5):多线程的方法及使用

可以参考微软技术文档https://msdn.microsoft.com/en-us/library/system.threading.thread(v=vs.110).aspx

 

Thread 方法很多,我们进行一下归纳,然后具体讲解一些常用的方法。

 

一、Thread 全部方法

 
Abort()

在调用此方法的线程上引发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()

  多线程总结之旅(5):多线程的方法及使用

  (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终止为止。