[C#] 執行緒 (ThreadPool)(二)
Introduction
這邊介紹 ThreadPool 類別,可以幫助有效的管理執行緒的資源,一昧的增加執行緒物件,若沒有有效的管理,
有時會變成程式的負擔。
其中 ThreadPool.QueueUserWorkItem 方法,可以幫使用者的工作排入執行緒的管佇列,由 ThreadPool 對其做
管理,分配執行此方法的執行緒個體。
下面是方法的原型:
public static bool QueueUserWorkItem(
WaitCallback callBack
)
public static bool QueueUserWorkItem(
WaitCallback callBack,
Object state
)
參數
- callBack
- 型別:System.Threading..::.WaitCallback
WaitCallback,表示要執行的方法。
- state
- 型別:System..::.Object
物件,含方法所需的資料。
Example
sample1
執行緒的分配,皆由 ThreadPool 類別決定,建立新執行緒去作業,還是配置已經回收的執行緒去作業。
using System.Threading;
namespace TestThreadPool {
class Program {
static void Main(string[] args) {
Console.WriteLine("以下開始將工作排入執行緒管理工作佇列 !!");
Console.WriteLine("***********************************************");
for (int n1 = 0; n1 < 3; n1++) {
//建立 WaitCallback 物件,並且指定回呼方法
WaitCallback myWaitCallback = new WaitCallback(WorkA);
//將 WaitCallback 排入排程
ThreadPool.QueueUserWorkItem(myWaitCallback, n1 + 1);
//使畫面慢慢輸出
Thread.Sleep(1000);
}
Console.WriteLine("*********************************************");
for (int n1 = 0; n1 < 3; n1++) {
ThreadPool.QueueUserWorkItem(new WaitCallback(WorkB), n1 + 1);
Thread.Sleep(1000);
}
Console.WriteLine("***********************************");
for (int n1 = 0; n1 < 3; n1++) {
ThreadPool.QueueUserWorkItem(new WaitCallback(WorkC), n1 + 1);
Thread.Sleep(1000);
}
Console.ReadLine();
}
public static void WorkA(object o) {
string Name;
//取得執行緒的雜湊碼
Name = "使用的執行緒編號 Thread ID# = " + Thread.CurrentThread.GetHashCode();
Console.WriteLine
("這是第一組被排入佇列的第 {0} 個工作,{1}", o, Name);
Console.WriteLine("此工作執行緒結束 !! ");
}
public static void WorkB(object o) {
string Name;
Name = "使用的執行緒編號 Thread ID# = " +
Thread.CurrentThread.GetHashCode();
Console.WriteLine
("這是第二組被排入佇列的第 {0} 個工作,{1}", o, Name);
Console.WriteLine("此工作執行緒暫停 2 秒 !! ");
Thread.Sleep(2000);
}
public static void WorkC(object o) {
string Name;
Name = "使用的執行緒編號 Thread ID# = " +
Thread.CurrentThread.GetHashCode();
Console.WriteLine
("這是第三組被排入佇列的第 {0} 個工作,{1}", o, Name);
Console.WriteLine("此工作執行緒暫停 10 秒 !! ");
Thread.Sleep(10000);
}
}
輸出結果
Refrence
- ThreadPool 類別
- ThreadPool 成員
- ThreadPool.QueueUserWorkItem 方法
- 執行緒和執行緒處理
- Managed 執行緒集區
- 識丁筆記 使用 Thread Pool
三小俠 小弟獻醜,歡迎指教