日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈ThreadPool 线程池(引用)

發布時間:2025/7/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈ThreadPool 线程池(引用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

淺談ThreadPool 線程池


相關概念:

????線程池可以看做容納線程的容器;

????一個應用程序最多只能有一個線程池;

????ThreadPool靜態類通過QueueUserWorkItem()方法將工作函數排入線程池;

????每排入一個工作函數,就相當于請求創建一個線程;

?

線程池的作用:

線程池是為突然大量爆發的線程設計的,通過有限的幾個固定線程為大量的操作服務,減少了創建和銷毀線程所需的時間,從而提高效率。

如果一個線程的時間非常長,就沒必要用線程池了(不是不能作長時間操作,而是不宜。),況且我們還不能控制線程池中線程的開始、掛起、和中止。

?

什么時候使用ThreadPool


?

ThreadPool?示例一?:

ThreadPool_1.csusing?System;
using?System.Text;
using?System.Threading;

namespace?多線程
{
????
public?class?Example
????{
????????
public?static?void?Main()
????????{
????????????
//?Queue?the?task.
????????????ThreadPool.QueueUserWorkItem(new?WaitCallback(ThreadProc));

????????????Console.WriteLine(
"Main?thread?does?some?work,?then?sleeps.");
??????????
????????????Thread.Sleep(
1000);

????????????Console.WriteLine(
"Main?thread?exits.");
????????}

????????
static?void?ThreadProc(Object?stateInfo)
????????{
????????????
//?No?state?object?was?passed?to?QueueUserWorkItem,?
????????????
//?so?stateInfo?is?null.
????????????Console.WriteLine("Hello?from?the?thread?pool.");
????????}
????}
}


ThreadPool?示例?:

ThreadPool_2.csusing?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Threading;

namespace?CS_Test
{
????
class?ThreadPool_Demo
????{
????????
//?用于保存每個線程的計算結果
????????static?int[]?result?=?new?int[10];


????????
//注意:由于WaitCallback委托的聲明帶有參數,
????????
//??????所以將被調用的Fun方法必須帶有參數,即:Fun(object?obj)。
????????static?void?Fun(object?obj)
????????{
????????????
int?n?=?(int)obj;

????????????
//計算階乘
????????????int?fac?=?1;
????????????
for?(int?i?=?1;?i?<=?n;?i++)
????????????{
????????????????fac?
*=?i;
????????????}
????????????
//保存結果
????????????result[n]?=?fac;
????????}

????????
static?void?Main(string[]?args)
????????{
????????????
//向線程池中排入9個工作線程
????????????for?(int?i?=?1;?i?<=?9?;?i++)
????????????{
????????????????
//QueueUserWorkItem()方法:將工作任務排入線程池。
????????????????ThreadPool.QueueUserWorkItem(new?WaitCallback(Fun),i);
????????????????
//?Fun?表示要執行的方法(與WaitCallback委托的聲明必須一致)。
????????????????
//?i???為傳遞給Fun方法的參數(obj將接受)。
????????????}

????????????
//輸出計算結果
????????????for?(int?i?=?1;?i?<=?9;?i++)
????????????{
????????????????Console.WriteLine(
"線程{0}:?{0}!?=?{1}",i,result[i]);
????????????}
????????}

????}
}


?

ThreadPool的作用:

總結

以上是生活随笔為你收集整理的浅谈ThreadPool 线程池(引用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。