程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 淺談.NET下的多線程和並行計算(二)線程基本知識

淺談.NET下的多線程和並行計算(二)線程基本知識

編輯:關於ASP.NET

首先來看看如何創建線程:

Console.WriteLine(Process.GetCurrentProcess().Threads.Count);
Thread t1 = new Thread(() =>
   {
     Thread.Sleep(1000);
     Thread t = Thread.CurrentThread;
     Console.WriteLine("Name: " + t.Name);
     Console.WriteLine("ManagedThreadId: " + t.ManagedThreadId);
     Console.WriteLine("State: " + t.ThreadState);
     Console.WriteLine("Priority: " + t.Priority);
     Console.WriteLine("IsBackground: " + t.IsBackground);
     Console.WriteLine("IsThreadPoolThread: " + t.IsThreadPoolThread);
   })
   {
     Name = "Thread1",
     Priority = ThreadPriority.Highest
   };
t1.Start();
Console.WriteLine(Process.GetCurrentProcess().Threads.Count);

我們在Thread的構造方法中傳入一個Lambda表達式,對應ThreadStart委托(無參void返回值的方法) 來構造一個線程任務。這段程序中有幾個注意點:

1)從輸出結果中可以看到,當前程序啟動後就3三個線程,新開線程後顯示為4個線程,在線程方法中 休眠了一秒,防止主線程執行完次線程就過早結束了。

2)我們可以為線程設置一個名字,方便調試。我們也可以設置線程的優先級,這個在之後會有進一步 介紹。

3)第7行,托管線程的唯一標識符,微軟建議使用托管線程的Id而不是操作系統中線程的Id來跟蹤線 程。

4)第10行代碼輸出了當前線程不是後台線程,也就是是前台線程,這是默認值。進程會等待前台線程 結束結束,而如果是後台線程的話,所有前台線程結束後後台線程自動終止。對於Windows GUI應用程序 來說,使用後台線程很可能發生詭異現象,也就是在程序從任務管理器的應用程序一欄中消失後其進程還 在,只能通過手動終止進程來釋放內存。

5)第11行代碼表明這個線程不是由線程池創建的,有關線程池見後文的介紹。

那麼我們再來看看如何為線程傳入參數,一種方式是使用匹配ParameterizedThreadStart委托 (object參數void返回值)的方法:

new Thread((date) => Console.WriteLine(((DateTime)date).ToString())).Start (DateTime.Now);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved