浅谈ThreadPool 线程池
相关概念:
线程池可以看做容纳线程的容器;
一个应用程序最多只能有一个线程池;
ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池;
每排入一个工作函数,就相当于请求创建一个线程;
线程池的作用:
线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。
如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止。
什么时候使用ThreadPool?
ThreadPool 示例一 :
ThreadPool_1.cs
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.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 线程池相关推荐
- 浅谈ThreadPool 线程池(引用)
出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...
- 常在池边游,却不曾到池子里一探究竟?浅谈Java线程池
浅谈Java线程池 线程池,简单来说,就是一个池子嘛,里面养着一群线程,ABCD........,然后你要用的时候,从里面拿一个去用,用完放回去. 一群人要用的时候,每个人都从池子里面拿一个线程,当池 ...
- 浅谈安卓线程池相关问题
作为一个标准的程序员,我们都非常清楚.线程的创建和销毁时一个耗时的操作,如果在程序中反复创建和销毁,那么APP的流畅度会很受影响,甚至会奔溃.为了增加程序健壮性且能是实现复杂业务逻辑,这时候我们引入线 ...
- java线程池和线程实例化_浅谈Java 线程池原理及使用方式
一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...
- 浅谈python线程池
python线程池的使用 python的多线程管理一直很麻烦,可能是我基础不够好,这里记录并分享以下python的线程池管理 在网上查了一个线程池的使用资料,个人感觉不是很清晰 但是重点很到位, 原文 ...
- python停止线程池_详解python中Threadpool线程池任务终止示例代码
需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...
- Java并发编程-ThreadPool线程池
ThreadPool线程池 1.线程池的优势 1.1.引言 1.2.为什么要使用线程池 2.线程池的使用 2.1.架构说明 2.2.线程池的三大方法 2.2.1.newFixedThreadPool( ...
- 浅谈linux线程模型和线程切换
本文从linux中的进程.线程实现原理开始,扩展到linux线程模型,最后简单解释线程切换的成本. 刚开始学习,不一定对,好心人们快来指正我啊啊啊!!! linux中的进程与线程 首先明确进程与进程的 ...
- python线程死锁的原因,浅谈Python线程的同步互斥与死锁
线程间通信方法 1. 通信方法 线程间使用全局变量进行通信 2. 共享资源争夺 共享资源:多个进程或者线程都可以操作的资源称为共享资源.对共享资源的操作代码段称为临界区. 影响 : 对共享资源的无序操 ...
最新文章
- java 算法练习题
- .net Forms身份验证不能用在应用的分布式部署中吗?
- Linux内存信息查看——free命令
- 【计算机本科补全计划】Mysql 学习小计(2)
- SpringMVC 理论与实用技术(一) 简单、实用、易懂的几个实例
- 化工仪表和自动化(自动控制系统)
- lombok @Builder 是如何实现的
- 扎克伯格的中文夜:想要成功就不能放弃
- OSChina 周六乱弹 —— 有人骂你神经病怎么办?
- java三态_Java中对象的三种状态
- 水泵怎么做_暖通空调|水泵出入口阀门及相关基础知识
- 网抑云熬夜打卡源码+微信登录+免签支付+今日打卡统计
- GCC一些有用的技巧
- MySQL 事务入门案例
- html右下角的广告特效,用jQuery实现网页右下角弹出广告效果
- 流程图软件Visio的使用笔记
- 【LeetCode】Day3-Excel表列名称
- python中node_size是什么意思_python里二叉树pop_node=q.pop(0)什么意思?
- 如何让计算机显示器满屏,电脑显示器满屏条纹的解决方法
- ubuntu16.04安装tensorflow,pytorch,gluon等
热门文章
- 买茶叶想到的哪个比较便宜 x1/y1 x2/y2 x代表多少钱 y代表 多少克 无聊的试炼...
- Nginx日志配置及分割
- 第12周Python学习周记
- 随心所欲学Java,起步-心理安慰
- 17.1 MySQL主从介绍;17.2 准备工作;17.3 配置主;17.4 配置从;17.5 测试主从同步...
- Java int基本类型和Integer之间引发的问题思考
- 1.5.2 编译java程序
- vlc学习计划(2)---二进制包安装及使用
- C# interview questions--- 国外大公司c#技术面试必看(总结贴一)
- 内部文件检索——公司经验管理系统的一种有效方法