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 ...
随机推荐
- object都有string
object都有tostringString item=spinner.getSelectedItem().toString();String item01=String.valueOf(spinne ...
- [ZJOI2018]历史(LCT)
这篇还发了洛谷题解 [Luogu4338] [BZOJ5212] 题解 题意 给出一棵树,给定每一个点的 \(access\) 次数,计算轻重链切换次数的最大值,带修改. 先考虑不带修改怎么做 假设 ...
- day18 约束 异常
1. 类的约束 方案一:抛出异常,子类必须重写父类方法,否则会报错 class Base: def login(self): #强制xxx做XXX事 raise NotImplementedError ...
- unittest框架
在我们真正的编写测试用例之前,我们需要了解一下测试框架. unittest是python自带的单元测试框架,尽管其主要是为单元测试服务的,但我们也可以用它来做接口的自动化测试. unittest框架为 ...
- asp.net AD 域验证
1.获取环境变量 string strAuthUser = request.ServerVariables["AUTH_USER"] 以上这行代码是用来获取当前用户的登录名 2.I ...
- python3 sorted()函数笔记
import randoma=[]for i in range(9): b=random.randint(0,9)#生产9个随机数 a.append(b)#把生成的随机数添加到列表里面print(so ...
- 对称加密中的ECB模式&CBC模式
ECB模式: CBC模式: 所有的迭代模式:
- android studio NDK配置
向您的项目添加 C 和 C++ 代码 本文内容 下载 NDK 和构建工具 创建支持 C/C++ 的新项目 构建和运行示例应用 向现有项目添加 C/C++ 代码 创建新的原生源文件 创建 CMake 构 ...
- 《我在谷歌大脑见习机器学习的一年:Node.js创始人的尝试笔记》阅读笔记
文章来源:https://www.toutiao.com/i6539751003690893828/?tt_from=weixin_moments&utm_campaign=client_sh ...
- RTT之内核服务函数
一 延时函数: rt_thread_delay(t) //调用时进入系统调度. rt_kprintf()函数在kservice.c中实现,如果不使用设备驱动,则由自定义函数void rt_hw_con ...