出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

浅谈ThreadPool 线程池

相关概念:

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

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

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

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

线程池的作用:

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

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

什么时候使用ThreadPool

ThreadPool 示例一 :

ThreadPool_1.cs

using 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.cs

using 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 线程池(引用)相关推荐

  1. 浅谈ThreadPool 线程池

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

  2. 常在池边游,却不曾到池子里一探究竟?浅谈Java线程池

    浅谈Java线程池 线程池,简单来说,就是一个池子嘛,里面养着一群线程,ABCD........,然后你要用的时候,从里面拿一个去用,用完放回去. 一群人要用的时候,每个人都从池子里面拿一个线程,当池 ...

  3. 浅谈安卓线程池相关问题

    作为一个标准的程序员,我们都非常清楚.线程的创建和销毁时一个耗时的操作,如果在程序中反复创建和销毁,那么APP的流畅度会很受影响,甚至会奔溃.为了增加程序健壮性且能是实现复杂业务逻辑,这时候我们引入线 ...

  4. java线程池和线程实例化_浅谈Java 线程池原理及使用方式

    一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...

  5. 浅谈python线程池

    python线程池的使用 python的多线程管理一直很麻烦,可能是我基础不够好,这里记录并分享以下python的线程池管理 在网上查了一个线程池的使用资料,个人感觉不是很清晰 但是重点很到位, 原文 ...

  6. python停止线程池_详解python中Threadpool线程池任务终止示例代码

    需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...

  7. Java并发编程-ThreadPool线程池

    ThreadPool线程池 1.线程池的优势 1.1.引言 1.2.为什么要使用线程池 2.线程池的使用 2.1.架构说明 2.2.线程池的三大方法 2.2.1.newFixedThreadPool( ...

  8. 浅谈linux线程模型和线程切换

    本文从linux中的进程.线程实现原理开始,扩展到linux线程模型,最后简单解释线程切换的成本. 刚开始学习,不一定对,好心人们快来指正我啊啊啊!!! linux中的进程与线程 首先明确进程与进程的 ...

  9. python线程死锁的原因,浅谈Python线程的同步互斥与死锁

    线程间通信方法 1. 通信方法 线程间使用全局变量进行通信 2. 共享资源争夺 共享资源:多个进程或者线程都可以操作的资源称为共享资源.对共享资源的操作代码段称为临界区. 影响 : 对共享资源的无序操 ...

最新文章

  1. 皮一皮:时代不同了...
  2. SQLServer 2005 XML 在 T-SQL 查询中的典型应用[转]
  3. php常用插件,关于PHP网站编程中常用插件的使用——w3cdream|前端学习-开发
  4. matlab Tips
  5. netbeans java中文_Ubuntu 下jdk安装中文字体 java 解决netbeans 方块字 中文乱码
  6. SEO按天扣费系统商业网站源码
  7. Glib2: undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)问题(六)
  8. pyechart基本图表
  9. Spring boot项目集成阿里云短信服务发送短信验证码
  10. java 优酷视频缩略图_通过正则表达式获取优酷视频缩略图
  11. container_of的用法
  12. java编程进阶类_进阶Java编程(9)反射与类操作
  13. html的视频字幕制作步骤,视频字幕制作软件如何制作视频滚动字幕|滚动字幕视频制作...
  14. Mybatis应用学习(4)——延迟加载
  15. Davinci Resolve Studio 17d5达芬奇调色软件专业版
  16. Direct3DCreate9与Direct3DCreate9Ex
  17. oppoR11S安装应用一直失败
  18. 孙正义:下一个30年将发生什么?
  19. 软件流程和管理(一):什么是项目
  20. 移动端拍照上传到服务器

热门文章

  1. python 13 常用模块 一
  2. tensorflow错误:Shape (10, ?) must have rank at least 3
  3. Docker入门简介
  4. 解决Asp.net中的Chart控件运行出现错误提示“ ChartImg.axd 执行子请求时出错”
  5. 类的笔记整理__7-10__
  6. Ubuntu下硬盘读写时声音很响问题的解决
  7. 音频降噪在58直播中的研究与实现
  8. 网络基础相关知识内容
  9. 如何理解Generator
  10. netty 5 alph1源码分析(服务端创建过程)