能夠參考微軟技術文檔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終止爲止。