簡單說明一下:
線程池可以看做容納線程的容器;一個(gè)應(yīng)用程序最多只能有一個(gè)線程池;ThreadPool靜態(tài)類通過QueueUserWorkItem()方法將工作函數(shù)排入線程池; 每排入一個(gè)工作函數(shù),就相當(dāng)于請求創(chuàng)建一個(gè)線程;
線程池的作用:
1、線程池是為突然大量爆發(fā)的線程設(shè)計(jì)的,通過有限的幾個(gè)固定線程為大量的操作服務(wù),減少了創(chuàng)建和銷毀線程所需的時(shí)間,從而提高效率。
2、如果一個(gè)線程的時(shí)間非常長,就沒必要用線程池了(不是不能作長時(shí)間操作,而是不宜。),況且我們還不能控制線程池中線程的開始、掛起、和中止。
一些使用例子:
實(shí)例一:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ThreadPoolDemo{ class Program {  static void Main(string[] args)  {   System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(TestThreadPool),new string[] {"drsw","sfs","sdfs"});   Console.ReadKey();  }  public static void TestThreadPool(object state)  {   string[] arry = state as string[]; //傳過來的參數(shù)值   int workerThreads = 0;   int completionPortThreads = 0;   System.Threading.ThreadPool.GetMaxThreads(out workerThreads, out completionPortThreads);   Console.Write(DateTime.Now.ToString() + "--" + arry[0] + "----workerThreads=" + workerThreads + "----completionPortThreads=" + completionPortThreads);  } }}上述代碼運(yùn)行結(jié)果:

使用例子二:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ThreadPoolDemo{ class Program {  static void Main(string[] args)  {   System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(TestThreadPool));   Console.ReadKey();  }  public static void TestThreadPool(object state)  {   int workerThreads = 0;   int completionPortThreads = 0;   System.Threading.ThreadPool.GetMaxThreads(out workerThreads, out completionPortThreads);   Console.Write(DateTime.Now.ToString() + "----workerThreads=" + workerThreads + "----completionPortThreads=" + completionPortThreads);  } }}上述代碼運(yùn)行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選