线程安全的ConcurrentQueue<T>队列
队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。
ConcurrentQueue<T>队列是一个高效的线程安全的队列,是.Net Framework 4.0,System.Collections.Concurrent命名空间下的一个数据结构。

- 1 对列初始化:
- 2
- 3 ConcurrentQueue<ApiLogContract> Queue = new ConcurrentQueue<ApiLogContract>();
- 4
- 5 /// <summary>
- 6 /// 单条入队列
- 7 /// </summary>
- 8 /// <param name="model">入列模型</param>
- 9
- 10 Queue.Enqueue(model);
- 11
- 12
- 13
- 14 /// <summary>
- 15 /// 多条入队
- 16 /// </summary>
- 17 /// <param name="list"></param>
- 18
- 19 List<ApiLogContract> list = new List<ApiLogContract>();
- 20
- 21 list.add(new model{});
- 22
- 23 list.add(new model{});
- 24
- 25 list.add(new model{});
- 26
- 27 list.add(new model{});
- 28
- 29 list.ForEach(t => Enqueue(t));
- 30
- 31
- 32
- 33 /// <summary>
- 34 /// 单条出队
- 35 /// </summary>
- 36 /// <returns></returns>
- 37
- 38 ApiLogContract apiLog = null;
- 39 Queue.TryDequeue(out apiLog);
- 40
- 41
- 42
- 43 /// <summary>
- 44 /// 多条出队
- 45 /// </summary>
- 46 /// <param name="count">数量</param>
- 47 /// <returns></returns>
- 48
- 49 var logs = new List<ApiLogContract>();
- 50
- 51 if (Queue.Count > 0)
- 52 {
- 53 for (int i = 0; i < count; i++)
- 54 {
- 55 var source = Dequeue();
- 56 if (source != null)
- 57 {
- 58 logs.Add(source);
- 59 }
- 60 }
- 61 }


- /// <summary>
- /// 获取对列数量
- /// </summary>
- /// <returns></returns>
- Queue.Count
- /// <summary>
- /// 确定序列是否包含任何元素[用于判断对列是否有要处理的数据]这个方法的性能比Count()方法快
- /// </summary>
- /// <returns></returns>
- Queue.Any()

以上就是对列的基本使用方法。
对列的使用场景有很多。所有要异步处理的都可以使用对列的方式。如接口日志异步处理,邮件、短信异步发送等。对列一般配合单例设计模式和线程一起使用更佳。
线程安全的ConcurrentQueue<T>队列的更多相关文章
- C#-----线程安全的ConcurrentQueue<T>队列
ConcurrentQueue<T>队列是一个高效的线程安全的队列,是.Net Framework 4.0,System.Collections.Concurrent命名空间下的一个数据 ...
- 线程安全之ConcurrentQueue<T>队列
最近在弄一个小项目,大概600w行的数据,要进行数据清洗,因数据量偏大,如果单线程去执行,会造成效率偏低,只能用多线程了,但采用多线程存在线程安全问题,于是查了下资料,发现有ConcurrentQue ...
- 线程池ThreadPoolExecutor与阻塞队列BlockingQueue应用
1.线程池介绍 JDK5.0以上: java.util.concurrent.ThreadPoolExecutor 构造函数签名: public ThreadPoolExecutor( int co ...
- 转:JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue
从Java5开始,Java提供了自己的线程池.每次只执行指定数量的线程,java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.以下是我的学习过程. 首先是构 ...
- java多线程:线程池原理、阻塞队列
一.线程池定义和使用 jdk 1.5 之后就引入了线程池. 1.1 定义 从上面的空间切换看得出来,线程是稀缺资源,它的创建与销毁是一个相对偏重且耗资源的操作,而Java线程依赖于内核线程,创建线程需 ...
- 线程高级应用-心得7-java5线程并发库中阻塞队列Condition的应用及案例分析
1.阻塞队列知识点 阻塞队列重要的有以下几个方法,具体用法可以参考帮助文档:区别说的很清楚,第一个种方法不阻塞直接抛异常:第二种方法是boolean型的,阻塞返回flase:第三种方法直接阻塞. 2. ...
- spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue
一: ThreadPoolTaskExecutor是一个spring的线程池技术,查看代码可以看到这样一个字段: private ThreadPoolExecutor threadPoolExecut ...
- java线程(7)——阻塞队列BlockingQueue
回顾: 阻塞队列,英文名叫BlockingQueue.首先他是一种队列,联系之前Java基础--集合中介绍的Queue与Collection,我们就很容易开始今天的阻塞队列的学习了.来看一下他们的接口 ...
- Elasticsearch源码分析—线程池(十一) ——就是从队列里处理请求
Elasticsearch源码分析—线程池(十一) 转自:https://www.felayman.com/articles/2017/11/10/1510291570687.html 线程池 每个节 ...
随机推荐
- javascript高级部分
回顾 回顾: 整体: - HTML - CSS - JavaScript - 基本数据类型 - for,while.. - DOM - obj = document.getElementById('. ...
- AGC 027C.ABland Yard(拓扑/二分图)
题目链接 \(Description\) 给定一张图(可能存在自环),每个点上有A或B.求是否存在一条路径,使得在上面不断走,能够得到所有AB串组合(可以重复经过点). \(n\leq2\times1 ...
- 张量系列(tensor02)
张量的两种运算 1. 张量的乘(Tensor product) tensorproduct() 2. 张量的缩并 tensorcontraction() The matrix trace is equ ...
- mysql安装后不是内部或外部命令解决
在环境变量中配置mysql的bin 怎么找到bin目录,在管理工具,服务,常规选项卡下找到 双击mysql后,常规选项卡下的路径就是bin的路径,然后把该路径配置到环境变量中,即可,然后net sta ...
- 细说ASP.NET Windows身份认证
上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使用广泛,不过,如果是在 Windows Ac ...
- AngularJS中自定义有关一个表格的Directive
本篇体验在AngularJS中自定义一个有关表格的Directive.表格的需求包括: ● 表格结构 <table> <thead> <tr> ...
- hive中 regexp_replace的用法,替换特殊字符问题
数据仓库中有的字段不合格,有特殊字符,比如换行符. poi_name \n19013 \n12013 怎么把换行符替换掉呢? https://cwiki.apache.org/confluence/d ...
- 【Spark】Sparkstreaming-性能调优
Sparkstreaming-性能调优 Spark Master at spark://node-01:7077 sparkstreaming 线程 数量_百度搜索 streaming中partiti ...
- 原创:vsphere概念深入系列二:vSphere交换机命令行查看排错
1.如何查看VM的IP Addresses, MAC Addresses, Uplink ports, Port ID,VSS/VDS,portgroup,DVPort Group,vmnic Upl ...
- PL/SQL学习笔记之变量、常量、字面量、字符串
一:变量 1:变量声明与初始化 variable_name datatype(约束) [:= | DEFAULT 初始值] 如: sales , ); name ); a ; greetings ) ...