多線程總結之旅(5):多線程的方法及使用

能夠參考微軟技術文檔https://msdn.microsoft.com/en-us/library/system.threading.thread(v=vs.110).aspx緩存

 

Thread 方法不少,咱們進行一下概括,而後具體講解一些經常使用的方法。安全

 

1、Thread 所有方法spa

 
Abort()

在調用此方法的線程上引起ThreadAbortException,以開始終止此線程的過程。操作系統

調用此方法一般會終止線程線程

 

AllocateDataSlot

在全部的線程上分配未命名的數據槽對象

 

AllocateNamedDataSlot 

在全部線程上分配已命名的數據槽blog

 

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

 當即向字段寫入一個值,以使該值對計算機中的全部處理器均可見
   
   

2、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終止爲止。

相關文章
相關標籤/搜索