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 }
線程操做函數
一、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()
若是運行上面的代碼,程序會等待3秒後退出,若是將註釋去掉,將thread設成後臺線程,則程序會當即退出
要注意的是,必須在調用Start方法以前設置線程的類型,不然一但線程運行,將沒法改變其類型
通常經過Begin...方法運行的線程都是後臺線程
線程優先級
高優先級,優先執行,但不表明優先完成 甚至說某些狀況下,還有意外發生,不能經過這個來控制線程的執行前後順序,由於操做系統不須要遵循線程的優先級,線程是計算機資源,程序操做線程,只能向操做系統通知,會有延時/不必定能真的執行
微軟文檔:
Thread:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.thread?view=netframework-4.8