浅谈ThreadPool 线程池(引用)
浅谈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 线程池
相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有一个线程池: ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相 ...
- 常在池边游,却不曾到池子里一探究竟?浅谈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. 共享资源争夺 共享资源:多个进程或者线程都可以操作的资源称为共享资源.对共享资源的操作代码段称为临界区. 影响 : 对共享资源的无序操 ...
最新文章
- 皮一皮:时代不同了...
- SQLServer 2005 XML 在 T-SQL 查询中的典型应用[转]
- php常用插件,关于PHP网站编程中常用插件的使用——w3cdream|前端学习-开发
- matlab Tips
- netbeans java中文_Ubuntu 下jdk安装中文字体 java 解决netbeans 方块字 中文乱码
- SEO按天扣费系统商业网站源码
- Glib2: undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)问题(六)
- pyechart基本图表
- Spring boot项目集成阿里云短信服务发送短信验证码
- java 优酷视频缩略图_通过正则表达式获取优酷视频缩略图
- container_of的用法
- java编程进阶类_进阶Java编程(9)反射与类操作
- html的视频字幕制作步骤,视频字幕制作软件如何制作视频滚动字幕|滚动字幕视频制作...
- Mybatis应用学习(4)——延迟加载
- Davinci Resolve Studio 17d5达芬奇调色软件专业版
- Direct3DCreate9与Direct3DCreate9Ex
- oppoR11S安装应用一直失败
- 孙正义:下一个30年将发生什么?
- 软件流程和管理(一):什么是项目
- 移动端拍照上传到服务器
热门文章
- python 13 常用模块 一
- tensorflow错误:Shape (10, ?) must have rank at least 3
- Docker入门简介
- 解决Asp.net中的Chart控件运行出现错误提示“ ChartImg.axd 执行子请求时出错”
- 类的笔记整理__7-10__
- Ubuntu下硬盘读写时声音很响问题的解决
- 音频降噪在58直播中的研究与实现
- 网络基础相关知识内容
- 如何理解Generator
- netty 5 alph1源码分析(服务端创建过程)