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

本文介绍了.NET框架中Thread类的各种方法,包括线程的创建、销毁、阻塞、挂起、唤醒等操作。重点讲解了Start(), Abort(), Suspend(), Resume(), Join(), Interrupt()等常用方法及其应用场景。

可以参考微软技术文档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()

  

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

  

转载于:https://www.cnblogs.com/qtiger/p/5826223.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值