C#排队处理DEMO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; namespace TestWait
{
class Program
{
public static Queue<Proccess> QueueMessage = new Queue<Proccess>();
static int count = 15;//只有15张票 static void Main(string[] args)
{ StartProccess();
//模拟并发 20个人同时买票
for (int i = 0; i < 20; i++)
{ ThreadPool.QueueUserWorkItem(new WaitCallback ((o)=>{
string index = (string)o;
Bay(index);
}),"客户端"+i);
}
Console.ReadKey();
} //购买服务
static bool Bay(String val)
{
Proccess p = new Proccess();
p.val = val;
p.ManualReset = new ManualResetEvent(false);
//lock (QueueMessage)
{
QueueMessage.Enqueue(p);//消息入列
Console.WriteLine("入列:" + val);
}
WaitHandle.WaitAll(new WaitHandle[] { p.ManualReset });//等待处理完成
return p.Result;
} //启动处理线程
static void StartProccess()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ProccessThread));
} //处理线程
static void ProccessThread(Object obj)
{
while (true)
{
if (QueueMessage.Count > 0)
{
Proccess message = QueueMessage.Dequeue();
if (count <= 0)
{
message.Result = false;
Console.WriteLine("处理失败:" + message.val);
}
else
{
message.Result = true;
Console.WriteLine("处理成功:" + message.val);
}
count--;
if (message.ManualReset != null)
message.ManualReset.Set();
}
else
{
//如果没有消息 停止3s
Thread.Sleep(3000);
}
}
}
} class Proccess{
public ManualResetEvent ManualReset
{
get;
set;
} public bool Result
{
get;
set;
} public String val
{
get;
set;
}
}
}
C#排队处理DEMO的更多相关文章
- Qt Undo Framework Demo
Qt Undo Framework Demo eryar@163.com Abstract. Qt’s Undo Framework is an implementation of the Comma ...
- MVC+MQ+WinServices+Lucene.Net Demo
前言: 我之前没有接触过Lucene.Net相关的知识,最近在园子里看到很多大神在分享这块的内容,深受启发.秉着“实践出真知”的精神,再结合公司项目的实际情况,有了写一个Demo的想法,算是对自己能力 ...
- WebRTC之带宽控制部分学习(1) ------基本demo的介绍
转自:http://blog.csdn.net/u013160228/article/details/46392037 WebRTC的代码真是非常之大啊,下载以及编译了我好几天才搞完..... 可以看 ...
- Java核心知识点学习----线程中的Semaphore学习,公共厕所排队策略
1.什么是Semaphore? A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acq ...
- Java中的多线程Demo
一.关于Java多线程中的一些概念 1.1 线程基本概念 从JDK1.5开始,Java提供了3中方式来创建.启动多线程: 方式一(不推荐).通过继承Thread类来创建线程类,重写run()方法作为线 ...
- Android -BLE蓝牙小DEMO
代码地址如下:http://www.demodashi.com/demo/13890.html 原文地址: https://blog.csdn.net/vnanyesheshou/article/de ...
- 【一起学源码-微服务】Hystrix 源码一:Hystrix基础原理与Demo搭建
说明 原创不易,如若转载 请标明来源! 欢迎关注本人微信公众号:壹枝花算不算浪漫 更多内容也可查看本人博客:一枝花算不算浪漫 前言 前情回顾 上一个系列文章讲解了Feign的源码,主要是Feign动态 ...
- 透过实例demo带你认识gRPC
摘要:gRPC是基于定义一个服务,指定一个可以远程调用的带有参数和返回类型的的方法.在服务端,服务实现这个接口并且运行gRPC服务处理客户端调用. 本文分享自华为云社区<gRPC介绍以及spri ...
- 通过一个demo了解Redux
TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...
随机推荐
- Resharper简单安装及代码覆盖率的测试
Resharper简单安装及代码覆盖率的测试 测试环境:VS 2015 专业版 一.下载Resharper 官方链接:https://www.jetbrains.com/resharper/ 点击下载 ...
- 基于RYU的拓扑发现
基于RYU的拓扑发现 前言 本次实验是一个基于RYU的拓扑发现功能.参考了呈神的实现方式,并加了一些自己实现方式,做了一些数据结构的改动. 数据结构 link_to_port 字典 有两种关系: 一是 ...
- PAT 甲级 1057 Stack
https://pintia.cn/problem-sets/994805342720868352/problems/994805417945710592 Stack is one of the mo ...
- Navicat Premium和Navicat for MySQL哪个好用?
之前在Navicat官网下载了Navicat Premium和Navicat for MySQL使用.Navicat官网产品下载地址:https://www.navicat.com.cn/produc ...
- Jquery 临时
<!--微信小程序--> <div id="page1" class="page page1"> <nav> <div ...
- MySQL的order by时区分大小写
Mysql 查询区分大小写 mysql查询默认是不区分大小写的 如: select * from some_table where str=‘abc'; select * from some_tabl ...
- download & excel & blob
download & excel & blob Blob https://developer.mozilla.org/en-US/docs/Web/API/Blob FileReade ...
- 【BOM】浏览器对象模型
1.navigator :保存浏览器配置信息的对象 常用 navigator.plugins: 显示浏览器中所有插件信息的集合 navigator.cookieEnabled: 判断是否开启cooki ...
- [代码]--IIS发布网站浏览之后看到的是文件目录 & Internal Server Error 处理程序“ExtensionlessUrlHandler-ISAPI-4.0_64bit”在其模块列表中有一个错误模块“IsapiModule” 解决方法 & App_global.asax.pduxejp_.dll”--“拒绝访问。 ”
Q:IIS发布网站浏览之后看到的是文件目录 A:它出现了一个说到.NET4.0 更高框架什么的错误,所以我将 .NTE CRL版本由4.0改为2.0了,改为2.0后就出现了只能浏览文件目录了.改为4. ...
- pom.xml文件中,添加自定义参数Properties
<properties> <powermock.version>1.6.6</powermock.version> </properties> < ...