相关概念:

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

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

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 线程池(引用)

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

  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. java 算法练习题
  2. .net Forms身份验证不能用在应用的分布式部署中吗?
  3. Linux内存信息查看——free命令
  4. 【计算机本科补全计划】Mysql 学习小计(2)
  5. SpringMVC 理论与实用技术(一) 简单、实用、易懂的几个实例
  6. 化工仪表和自动化(自动控制系统)
  7. lombok @Builder 是如何实现的
  8. 扎克伯格的中文夜:想要成功就不能放弃
  9. OSChina 周六乱弹 —— 有人骂你神经病怎么办?
  10. java三态_Java中对象的三种状态
  11. 水泵怎么做_暖通空调|水泵出入口阀门及相关基础知识
  12. 网抑云熬夜打卡源码+微信登录+免签支付+今日打卡统计
  13. GCC一些有用的技巧
  14. MySQL 事务入门案例
  15. html右下角的广告特效,用jQuery实现网页右下角弹出广告效果
  16. 流程图软件Visio的使用笔记
  17. 【LeetCode】Day3-Excel表列名称
  18. python中node_size是什么意思_python里二叉树pop_node=q.pop(0)什么意思?
  19. 如何让计算机显示器满屏,电脑显示器满屏条纹的解决方法
  20. ubuntu16.04安装tensorflow,pytorch,gluon等

热门文章

  1. 买茶叶想到的哪个比较便宜 x1/y1 x2/y2 x代表多少钱 y代表 多少克 无聊的试炼...
  2. Nginx日志配置及分割
  3. 第12周Python学习周记
  4. 随心所欲学Java,起步-心理安慰
  5. 17.1 MySQL主从介绍;17.2 准备工作;17.3 配置主;17.4 配置从;17.5 测试主从同步...
  6. Java int基本类型和Integer之间引发的问题思考
  7. 1.5.2 编译java程序
  8. vlc学习计划(2)---二进制包安装及使用
  9. C# interview questions--- 国外大公司c#技术面试必看(总结贴一)
  10. 内部文件检索——公司经验管理系统的一种有效方法