C#多线程之线程池(ThreadPool)
作者:農碼一生 发布时间:2022-05-02 07:12:15
标签:C#,多线程,线程池,ThreadPool
一、简介
前面介绍了平时用到的大多数的多线程的例子,但在实际开发中使用的线程往往是大量的和更为复杂的,这时,每次都创建线程、启动线程。从性能上来讲,这样做并不理想(因为每使用一个线程就要创建一个,需要占用系统开销);从操作上来讲,每次都要启动,比较麻烦。为此引入的线程池的概念。
好处:
1.减少在创建和销毁线程上所花的时间以及系统资源的开销
2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。
在什么情况下使用线程池?
1.单个任务处理的时间比较短
2.需要处理的任务的数量大
线程池最多管理线程数量=“处理器数 * 250”。也就是说,如果您的机器为2个2核CPU,那么CLR线程池的容量默认上限便是1000。通过线程池创建的线程默认为后台线程,优先级默认为Normal。
二、代码
案例一:
class Program
{
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod1), new object()); //参数可选
Console.ReadKey();
}
public static void ThreadMethod1(object val)
{
for (int i = 0; i <= 10000; i++)
{
if (i % 1000 == 0)
{
if (string.IsNullOrEmpty(Thread.CurrentThread.Name) )
{
Thread.CurrentThread.Name = "Thred_" + i;
}
Console.WriteLine("循環{0}次的線程的線程名稱為:{1}",i,Thread.CurrentThread.Name);
}
}
}
}
运行结果:
案例二:
class Program
{
public static void Main()
{
// Queue the task.
ThreadPool.QueueUserWorkItem(ThreadProc);
Console.WriteLine("Main thread does some work, then sleeps.");
Thread.Sleep(1000);
Console.WriteLine("Main thread exits.");
Console.ReadKey();
}
// This thread procedure performs the task.
static void ThreadProc(Object stateInfo)
{
// No state object was passed to QueueUserWorkItem, so stateInfo is null.
Console.WriteLine("Hello from the thread pool.");
}
}
运行结果:
来源:https://www.cnblogs.com/wml-it/p/14822883.html


猜你喜欢
- —学习并使用mybatis-plus的一些高级功能的用法例如: AR模式、 乐观锁 、逻辑删除 、自动填充、数据保护等功能为了方便演示,咱们
- 计算器项目,要求实现加、减、乘、除、求倒数、求平方根等简单运算。真机调试结果如下图:布局文件:main_activity.xml<?x
- 本文实例为大家分享了Android studio设计简易计算器的具体代码,供大家参考,具体内容如下效果显示:第一步,简单的界面布局<?
- 使用OptionMenu只要重写两个方法public boolean onCreateOptionsMenu(Menu menu):菜单的初
- 找入口对 Spring 有一定基础的同学一定知道,请求入口是DispatcherServlet,所有的请求最终都会落到doDispatch方
- 本文实例为大家分享了Android实现欢迎滑动页面的具体代码,供大家参考,具体内容如下一、效果图二、源码1.activity_welcome
- 本文为大家分享了使用栈的迷宫算法java版,主要考察栈的使用,供大家参考,具体内容如下主要思路如下: do { if(当前位置可通过) {
- 本文主要介绍了关于c#和java base64不一致的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧不一致的问题不
- 日志过滤对于一个网站日志,首先要对它进行过滤,删除一些不必要的信息,我们通过scala语言来实现,清洗代码如下,代码要通过别的软件打包为ja
- spring中事务处理原理 利用aop生成代理对象执行带有Transactional事务注解的
- SpringBoot的具体介绍可以参看其他网上介绍,这里就不多说了,就这几天的学习,个人理解,简而言之: (1)它是Spring的
- Unity3D UGUI Text得分数字增加 代码一、首先在Hierarchy中创建Text,并绑定脚本。using UnityEngin
- 引导语线程池我们在工作中经常会用到。在请求量大时,使用线程池,可以充分利用机器资源,增加请求的处理速度,本章节我们就和大家一起来学习线程池。
- 前言前阵子有同学反馈Flutter中的http请求无法通过fiddler抓包,作者喜欢使用Charles抓包工具,于是抽时间写了个小demo
- 本文实例讲述了Android使用onCreateOptionsMenu()创建菜单Menu的方法。分享给大家供大家参考,具体如下:Andro
- Android 中解决Viewpage调用notifyDataSetChanged()时界面无刷新的问题问题描述相信很多做过Viewpage
- Lambda表达式的进化之路为什么要使用Lambda表达式可以简洁代码,提高代码的可读性可以避免匿名内部类定义过多导致逻辑紊乱在原先实现接口
- Kotlin 基础教程之异常概述在Kotlin-null的处理里提到的NPE,它就是一个异常。而,异常是程序运行过程中出现的错误。在Kotl
- 本文实例为大家分享了android实现滚动文本效果的具体代码,供大家参考,具体内容如下效果图实现方法直接上代码首先是一个自定义layout,
- Android9.0无法通过以下两种方式实现静默安装:1.runtime执行shell cmd2.PackageInstall 反射机制但是