浅谈ThreadPool 线程池(引用)
生活随笔
收集整理的這篇文章主要介紹了
浅谈ThreadPool 线程池(引用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html
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.");
????????}
????}
}
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靜態類通過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 线程池(引用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 毕业设计记录(三)mysql的SQL语句
- 下一篇: 微信公众平台营销?