多线程系列(2)线程池ThreadPool
上一篇文章我们总结了多线程最基础的知识点Thread,我们知道了如何开启一个新的异步线程去做一些事情。可是当我们要开启很多线程的时候,如果仍然使用Thread我们需要去管理每一个线程的启动,挂起和终止,显然是很麻烦的一件事情。还好.net framework为我们提供了线程池ThreadPool来帮助我们来管理这些线程,这样我们就不再需要手动地去终止这些线程。这一篇文章就让我们来学习一下线程池ThreadPool吧。关于它我想从以下几个方面进行总结。
- 认识线程池ThreadPool
- ThreadPool的用法
认识线程池ThreadPool
ThreadPool类是一个静态类,你不能也不必要生成它的对象。而且一旦使用该方法在线程池中添加了一个项目,那么该项目是无法取消的。这里你无需自己建立线程,我们只需要把要做的工作写成函数,然后作为参数传递给ThreadPool.QueueUserWorkItem()方法就行了,传递的方法是依靠WaitCallBack代理对象,而线程的建立,管理和运行等工作都是由系统自动完成的,你无须考虑那些复杂的细节问题了。
ThreadPool的用法
我现在在之前的例子的基础上,使用线程池ThreadPool来实现。代码如下。
namespace ThreadDemo
{
class Program
{
static void Main(string[] args)
{
// 使用ThreadPool实现
Fish fish1 = new Fish { Name = "小黄鱼" };
Fish fish2 = new Fish { Name = "大鲨鱼" };
Fish fish3 = new Fish { Name = "灯笼鱼" };
Fish fish4 = new Fish { Name = "红鲤鱼" };
Fish fish5 = new Fish { Name = "灯笼鱼" };
ThreadPool.QueueUserWorkItem(f => { fish1.Move(); }); //lambda表达式
ThreadPool.QueueUserWorkItem(f => { fish2.Move(); });
ThreadPool.QueueUserWorkItem(f => { fish3.Move(); });
ThreadPool.QueueUserWorkItem(f => { fish4.Move(); });
ThreadPool.QueueUserWorkItem(f => { fish5.Move(); }); Console.ReadKey();
}
} /// <summary>
/// 鱼
/// </summary>
public class Fish
{
public string Name { get; set; } public int Score { get; set; } public Fish()
{
} public void Move()
{
Console.WriteLine(string.Format("{0}在游来游去...", Name));
}
}
}
程序运行结果如下。
aaarticlea/png;base64,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" alt="" />
下一篇文章我将要总结.net 4.0中新增的特性Task任务,欢迎大家继续关注。
多线程系列(2)线程池ThreadPool的更多相关文章
- Java多线程系列--“JUC线程池”06之 Callable和Future
概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...
- Java多线程系列--“JUC线程池”02之 线程池原理(一)
概要 在上一章"Java多线程系列--“JUC线程池”01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析Th ...
- Java多线程系列--“JUC线程池”03之 线程池原理(二)
概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...
- Java多线程系列--“JUC线程池”04之 线程池原理(三)
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--“基础篇”01之 基 ...
- Java多线程系列--“JUC线程池”05之 线程池原理(四)
概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略 ...
- C#多线程学习 之 线程池[ThreadPool](转)
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- C#多线程学习 之 线程池[ThreadPool]
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- [转]C#多线程学习 之 线程池[ThreadPool]
在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPo ...
- python中多进程multiprocessing、多线程threading、线程池threadpool
浅显点理解:进程就是一个程序,里面的线程就是用来干活的,,,进程大,线程小 一.多线程threading 简单的单线程和多线程运行:一个参数时,后面要加逗号 步骤:for循环,相当于多个线程——t=t ...
随机推荐
- DevOps - CI - Sonar
Sonar 官方信息 https://www.sonarqube.org/ https://www.sonarqube.org/downloads/ https://docs.sonarqube.or ...
- C# 单元测试(入门)
注:本文示例环境 VS2017XUnit 2.2.0 单元测试框架xunit.runner.visualstudio 2.2.0 测试运行工具Moq 4.7.10 模拟框架 什么是单元测试? 确保软件 ...
- Unity项目接入应用宝SDK实现截图功能
Unity项目接入应用宝SDK实现截图功能 问题由来 点击应用宝悬浮窗 如图所示 左下角有一个截图按钮 需要解决那些问题 截图信息需要由游戏引擎提供 SDK获取截图信息为同步 但是Unity引擎没有提 ...
- 剑指offer四之重建二叉树
一.题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...
- (转)centos 7 Tomcat 8.5 的安装及生产环境的搭建调优
原文:https://www.cnblogs.com/linhankbl/articles/9149804.html#top JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7.8性能对比) ...
- spring jpa : 多条件查询
https://www.cnblogs.com/Donnnnnn/p/6277872.html 方式一: 第一步:EmpAccNumService package com.payease.scford ...
- Mac终端配置,DIY你的Terminal (iTerm 2 + Oh My Zsh)
使用mac osx一年以来,自带的Terminal终端一直都是白底黑字,食之无味,越来越缺乏新鲜感,怎么也得想个法子来刺激下眼球. 不然花那么多大洋买你回来是要哪般,难道真是为来学习工作??? 怎么可 ...
- JLS中表达式的所有文法
3.8. Identifiers Identifier: IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral Iden ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(八):MyBatis分页功能实现
使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写 count 和 select,幸 ...
- ASP.NET 数据绑定到列表控件
<div> <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox> ...