相关概念:

线程池可以看做容纳线程的容器;

一个应用程序最多只能有一个线程池;

ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池;

每排入一个工作函数,就相当于请求创建一个线程;

线程池的作用:

线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。

如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止。

什么时候使用ThreadPool

ThreadPool 示例一 :

  1.  
  2. ThreadPool_1.cs
  3.  
  4. using System;
  5. using System.Text;
  6. using System.Threading;
  7.  
  8. namespace 多线程
  9. {
  10.     public class Example
  11.     {
  12.         public static void Main()
  13.         {
  14.             // Queue the task.
  15.             ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
  16.  
  17.             Console.WriteLine("Main thread does some work, then sleeps.");
  18.           
  19.             Thread.Sleep(1000);
  20.  
  21.             Console.WriteLine("Main thread exits.");
  22.         }
  23.  
  24.         static void ThreadProc(Object stateInfo)
  25.         {
  26.             // No state object was passed to QueueUserWorkItem, 
  27.             // so stateInfo is null.
  28.             Console.WriteLine("Hello from the thread pool.");
  29.         }
  30.     }
  31. }

ThreadPool 示例二 :

  1.  
  2. ThreadPool_2.cs
  3.  
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Threading;
  8.  
  9. namespace CS_Test
  10. {
  11.     class ThreadPool_Demo
  12.     {
  13.         // 用于保存每个线程的计算结果
  14.         static int[] result = new int[10];
  15.  
  16.         //注意:由于WaitCallback委托的声明带有参数,
  17.         //      所以将被调用的Fun方法必须带有参数,即:Fun(object obj)。
  18.         static void Fun(object obj)
  19.         {
  20.             int n = (int)obj;
  21.  
  22.             //计算阶乘
  23.             int fac = 1;
  24.             for (int i = 1; i <= n; i++)
  25.             {
  26.                 fac *= i;
  27.             }
  28.             //保存结果
  29.             result[n] = fac;
  30.         }
  31.  
  32.         static void Main(string[] args)
  33.         {
  34.             //向线程池中排入9个工作线程
  35.             for (int i = 1; i <= 9 ; i++)
  36.             {
  37.                 //QueueUserWorkItem()方法:将工作任务排入线程池。
  38.                 ThreadPool.QueueUserWorkItem(new WaitCallback(Fun),i);
  39.                 // Fun 表示要执行的方法(与WaitCallback委托的声明必须一致)。
  40.                 // i   为传递给Fun方法的参数(obj将接受)。
  41.             }
  42.  
  43.             //输出计算结果
  44.             for (int i = 1; i <= 9; i++)
  45.             {
  46.                 Console.WriteLine("线程{0}: {0}! = {1}",i,result[i]);
  47.             }
  48.         }
  49.  
  50.     }
  51. }

ThreadPool的作用:

 

ThreadPool 线程池的作用的更多相关文章

  1. 多线程 ThreadPool线程池

    简单说明一下: 线程池可以看做容纳线程的容器:一个应用程序最多只能有一个线程池:ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相 ...

  2. ThreadPool线程池 小结

    ThreadPool类提供一个线程池,该线程池可用于发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器 线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程.一个线程 ...

  3. 浅谈线程池(中):独立线程池的作用及IO线程池

    原文地址:http://blog.zhaojie.me/2009/07/thread-pool-2-dedicate-pool-and-io-pool.html 在上一篇文章中,我们简单讨论了线程池的 ...

  4. 浅谈线程池(上):线程池的作用及CLR线程池

    原文地址:http://blog.zhaojie.me/2009/07/thread-pool-1-the-goal-and-the-clr-thread-pool.html 线程池是一个重要的概念. ...

  5. 浅谈ThreadPool 线程池

    本文来自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有 ...

  6. 浅谈ThreadPool 线程池(引用)

    出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...

  7. 转载【浅谈ThreadPool 线程池】

    浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

  8. 【多线程】-ThreadPool线程池

    ThreadPool介绍: Thread类是一个静态类,所有不存在实例化构造函数操作,直接可以调用其内所存在的方法. 微软官网给出的解释: 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 ...

  9. .net 线程基础 ThreadPool 线程池

    1. ThreadPool 线程池异步: //public static bool QueueUserWorkItem(WaitCallback callBack); //public static ...

随机推荐

  1. 免费的天气预报API--谷歌,雅虎,中央气象台

    Google Weather API 仅仅支持美国地区使用邮政编码进行查询,比如:  http://www.google.com/ig/api?hl=zh-cn&weather=94043  ...

  2. 在VS2012中GridView的一个坑

    使用GridView的时候遇到了一个坑,一个增加一个选择按钮~貌似在某些情况下会出现一个是否允许选择的属性,貌似会默认为fals,然后就返回不了指定ID!坑,巨坑!但是今天居然找不到这个属性了,难道是 ...

  3. 解决fedora64下vim不能语法着色问题

    初始状态是vim打开任何文件都没有高亮迹象,接不是彩色,也没有下划线,好了,看怎么一步步解决的... 1)#vim ~/.vimrc 竟然没有这个文件,创建之#touch vim ~/.vimrc 添 ...

  4. android:layout_weight总有你不知道的用法.

    都知道weight是权重的意思. 在布局中起到非常重要的作用. 但是这玩意不能嵌套使用, 而且只能使用在LinearLayout中. 下面说说它的几种用法(以下例子全为横排 注意android:lay ...

  5. iOS语音合成

    苹果公司在iOS7中推出了语音合成的技术,无需网络环境也可以实现语音合成. iOS7语音合成的主要的API如下: 1.AVSpeechUtterance,是语音合成的基本单位,它封装影响语音合成的需要 ...

  6. struts2.1笔记05:struts2开发环境的搭建

    1.找到开发Struts应用需要使用到的jar文件. 首先我们要在myEclipse中新建一个Web Project,我们这里命名为"struts2".然后我们就要使用jar文件, ...

  7. uva10004 Bicoloring 黑白染色问题,DFS

    又是水题,最近切题目只能切出水题...orz 给出一个联通图,要求在个点上染上两种颜色,相邻的点颜色不能相同,看能不能染色成功. 用dfs搜索一个点的每条边,着色递归,如果已经染过色的且颜色出现矛盾就 ...

  8. SQL Server blocking session

    select * from sys.sysprocesses where blocked>0; 96被95block住了. dbcc INPUTBUFFER(95) dbcc INPUTBUFF ...

  9. github/hexo搭建个人博客几个问题总结

    问题一:hexo ERROR Deployer not found: github or hexo ERROR Deployer not found: git npm install hexo-dep ...

  10. Gnome下Gvim菜单无法显示的解决办法

    前些日子从Xfce转向了Elementary OS,安装Gvim后发现菜单无法显示,现在找到了解决的办法. 编辑文件  -/.gnome2/vim [Placement] Dock=Toolbar\\ ...