C#队列Queue,利用队列处理订单
一、什么是队列
队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。
这是摘抄网上的。做了个demo,但笔者技术有限,如有改进的地方,欢迎大神多多指导。
二、利用队列来处理订单问题
思路:开启一个线程去创建订单,同时处理订单线程开启,如队列里有订单,那么就处理,直到没有就一直处于等待状态(这里我等待20次就退出),等待订单加入队列再继续处理订单。
1、新建一个订单OrderInfo(用的是结构)
public struct OrderInfo
{
public int OrderId { get; set; }
public int ProductId { get; set; }
public Decimal Price { get; set; }
public string Remarks { get; set; }
}
2、到控制执行
class Program
{
public static readonly Queue<OrderInfo> queue = new Queue<OrderInfo>();
public static object obj = new object();
static void Main(string[] args)
{
#region 模仿淘宝处理订单问题
//订单进入队列等待
Task OrderTask = new Task(CreateOrder);
OrderTask.Start(); //开启线程处理订单
Task taskDeal = new Task(DealOrder);
taskDeal.Start();
Console.WriteLine("hello");
#endregion Console.ReadKey();
}
public static void CreateOrder()
{
for (int i = ; i < ; i++)
{
Thread.Sleep();
lock (obj)
{
OrderInfo order = new OrderInfo();
order.OrderId = i;
order.ProductId = + i;
order.Price = ;
order.Remarks = "quick send goods";
queue.Enqueue(order);
Console.WriteLine("添加了一条订单" + i);
}
}
} public static int flag = ;
public static void DealOrder()
{
while (true)
{
Thread.Sleep();
if (queue.Count > )
{
lock (obj)
{
if (queue.Count > )
{
OrderInfo order = queue.Dequeue();
Console.WriteLine("处理==>订单号{0};商品:{1}价格:{2}", order.OrderId, order.ProductId, order.Price);
}
}
}
else
{
Thread.Sleep();
flag++;
if (flag > ) { Console.WriteLine("All Over"); break; }
lock (obj)
{
if (queue.Count <= )
{
Console.WriteLine("订单处理完成,等待中。。。");
}
}
}
} }
}
测试截图如下:


C#队列Queue,利用队列处理订单的更多相关文章
- 队列(Queue)--环形队列、优先队列和双向队列
1. 队列概述 队列和堆栈都是有序列表,属于抽象型数据类型(ADT),所有加入和删除的动作都发生在不同的两端,并符合First In, First Out(先进先出)的特性. 特性: ·FIFO ·拥 ...
- Python与数据结构[2] -> 队列/Queue[0] -> 数组队列的 Python 实现
队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- ...
- C# 队列Queue,ConcurrentQueue,BlockingCollection 并发控制lock,Monitor,信号量Semaphore
什么是队列? 队列Queues,是一种遵循先进先出的原则的集合,在.netCore中微软给我们提供了很多个类,就目前本人所知的有三种,分别是标题提到的:Queue.ConcurrentQueue.Bl ...
- python中利用队列asyncio.Queue进行通讯详解
python中利用队列asyncio.Queue进行通讯详解 本文主要给大家介绍了关于python用队列asyncio.Queue通讯的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细 ...
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
- (C#)使用队列(Queue)解决简单的并发问题
(C#)使用队列(Queue)解决简单的并发问题 2015-07-16 13:04 13265人阅读 评论(8) 收藏 举报 分类: Asp.Net(8) 版权声明:本文为博主原创文章,未经博主允 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之队列(Queue)实现
本篇是数据结构与算法的第三篇,本篇我们将来了解一下知识点: 队列的抽象数据类型 顺序队列的设计与实现 链式队列的设计与实现 队列应用的简单举例 优先队列的设置与实现双链表实现 队列的抽象数据类型 ...
- [转载] ZooKeeper实现分布式队列Queue
转载自http://blog.fens.me/zookeeper-queue/ 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让Hadoop集群跑在VPS虚拟主机上,通过云向用户 ...
- java队列——queue详细分析
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Deque接 口. Q ...
随机推荐
- 利用DSB2017冠军开源代码为LUNA16生成mask
代码地址:https://github.com/lfz/DSB2017 先展示下生成的mask与真实mask subset9 subset8 subset7 subset6 subset5 subse ...
- LUNA16数据集(一)简介
LUNA16,全称Lung Nodule Analysis 16,是16年推出的一个肺部结节检测数据集,旨在作为评估各种CAD(computer aid detection计算机辅助检测系统)的ban ...
- Solr学习笔记(2) —— Solr管理索引库
一.维护索引 1.1 添加/更新文档 1.2 批量导入数据(使用dataimport) 第一步:把mysql的数据驱动.以及dataimport插件依赖的jar包添加到solrcore(collect ...
- POJ 3734 Blocks(矩阵快速幂+矩阵递推式)
题意:个n个方块涂色, 只能涂红黄蓝绿四种颜色,求最终红色和绿色都为偶数的方案数. 该题我们可以想到一个递推式 . 设a[i]表示到第i个方块为止红绿是偶数的方案数, b[i]为红绿恰有一个是偶数 ...
- DJ
必知必会13条 all():查询所有结果 filter(**kwargs) 过滤,取到符合条件的对象,比get方法好,找不到会返回空 get(**kwargs) 取到符合条件对象,对象有 ...
- Jenkins安装过程
1.安装环境 配置java环境 安装Tomcat 2.将Jenkins.war 包放入Tomcat的webapps目录 3.启动tomcat后,tomcat会解压war包,生成一个jenkins文件夹 ...
- JS图片加载失败用默认图片代替
1.onerror 事件会在文档或图像加载过程中发生错误时被触发. 当图片不存在时,将触发onerror,onerror 中img为 指定的默认图片. 图片存在则显示正常图片,图片不存在将显示默认. ...
- apache 与php的安装
1 系统环境与软件 1 php5.5.6 下载链接:http://windows.php.net/download/#php-5.5 推荐 V11 x64,也就是64bit的. 2 apache2 ...
- php数组·的方法-数组排序
/* * * 数组排序函数*/ //asort() 数组元素值升序排序 //arsort() 降序 $arr7=array(1,23,65,34,3,2,3,34,453,54,456,65,5); ...
- 可输入的 Combox(DropDownList)
aspx页面中需要可以输入的combox,在网上找了一个js的插件,效果图如下: