C# Thread 線程

Thread  建立和控制線程,設置其優先級並獲取其狀態api

Thread構造函數接收一個無參數或帶一個object類型參數的委託ide

 1                {
 2                     Console.WriteLine("********ManagedThreadId:{0} {1}********", Thread.CurrentThread.ManagedThreadId.ToString("00"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
 3                     ParameterizedThreadStart method = o => NoReturnWithParamater(o);
 4                     Thread thread = new Thread(method);
 5                     thread.Start("123");//開啓線程,執行委託的內容
 6                 }
 7                 {
 8                     ThreadStart method = DoSomeThing;
 9                     Thread thread = new Thread(method);
10                     thread.Start();//開啓線程,執行委託的內容
11                     thread.Suspend();//暫停
12                     thread.Resume();//恢復    
13                     //thread.Abort();
14                     //線程是計算機資源,程序想停下線程,只能向操做系統通知(線程拋異常),
15                     //會有延時/不必定能真的停下來
16                     Thread.ResetAbort();
17                     //1等待
18                     while (thread.ThreadState != System.Threading.ThreadState.Stopped)
19                     {
20                         Thread.Sleep(200);//當前線程休息200ms
21                     }
22                     //2 Join等待
23                     thread.Join();//運行這句代碼的線程,等待thread的完成
24                     thread.Join(1000);//最多等待1000ms
25                 }
View Code

線程操做函數

一、Start()           使線程處於Running狀態,線程開始執行spa

二、Suspend()    掛起線程,或者若是線程已掛起,則不起做用操作系統

三、Resume()     繼續執行已掛起的線程線程

四、Abort()、Abort(Object)     調用此方法一般會終止線程code

五、ResetAbort()     取消當前線程所請求的 Abort(Object)blog

六、Sleep(Int32)、Sleep(TimeSpan)    將當前線程掛起指定的時間資源

七、Join()、Join(Int32)、Join(TimeSpan) 在繼續執行程序,阻止調用線程,直到由該實例表示的線程終止或通過了指定時間爲止文檔

先後臺線程

區別是:應用程序必須運行完全部的前臺線程才能夠退出;而對於後臺線程,應用程序則能夠不考慮其是否已經運行完畢而直接退出,全部的後臺線程在應用程序退出時都會自動結束

能夠經過設置 IsBackground 屬性來更改

1 public static void threadMethod()
2 {
3     Thread.Sleep(3000);
4 }
5 Thread thread = new Thread(threadMethod);
6 // thread.IsBackground = true;
7 thread.Start()
View Code

若是運行上面的代碼,程序會等待3秒後退出,若是將註釋去掉,將thread設成後臺線程,則程序會當即退出
要注意的是,必須在調用Start方法以前設置線程的類型,不然一但線程運行,將沒法改變其類型

通常經過Begin...方法運行的線程都是後臺線程

線程優先級

高優先級,優先執行,但不表明優先完成  甚至說某些狀況下,還有意外發生,不能經過這個來控制線程的執行前後順序,由於操做系統不須要遵循線程的優先級,線程是計算機資源,程序操做線程,只能向操做系統通知,會有延時/不必定能真的執行

微軟文檔:

Thread:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.thread?view=netframework-4.8

相關文章
相關標籤/搜索