BlockingCollection实现生产者消费者
很简单的代码,看注释
class Program
{
private static ManualResetEvent _manualResetEvent = new ManualResetEvent(false);
// 参数值1,约束集合的大小。当_messageQueue.Add时大小已经为1时,Add会阻塞。可注释掉Thread.Sleep(5000);尝试
//private static BlockingCollection<string> _messageQueue = new BlockingCollection<string>(1);
// 不限大小
private static BlockingCollection<string> _messageQueue = new BlockingCollection<string>();
static void Main(string[] args)
{
startProducer();
startConsumer();
_manualResetEvent.WaitOne();
}
/// <summary>
/// 生产者
/// </summary>
private static void startProducer()
{
var ProducerThread = new Thread(() =>
{
while (true)
{
var message = Console.ReadLine();
if (message == "exit")
{
_manualResetEvent.Set();
return;
}
Console.WriteLine($"生产者发出消息: {message}");
_messageQueue.Add(message);
}
});
ProducerThread.IsBackground = true;
ProducerThread.Start();
}
/// <summary>
/// 消费者
/// </summary>
private static void startConsumer()
{
var consumerThread = new Thread(() =>
{
// 这里会一直执行下去, 有消息则会处理
foreach (var message in _messageQueue.GetConsumingEnumerable())
{
Console.WriteLine($"消费者收到消息:{message}");
//Thread.Sleep(5000);
}
});
consumerThread.IsBackground = true;
consumerThread.Start();
}
}
BlockingCollection实现生产者消费者的更多相关文章
- 基于阻塞队列的生产者消费者C#并发设计
这是从上文的<<图文并茂的生产者消费者应用实例demo>>整理总结出来的,具体就不说了,直接给出代码,注释我已经加了,原来的code请看<<.Net中的并行编程-7 ...
- 图文并茂的生产者消费者应用实例demo
前面的几篇文章<<.NET 中的阻塞队列BlockingCollection的正确打开方式>><<项目开发中应用如何并发处理的一二事>>从代码以及理论角 ...
- 队列&生产者消费者
Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用多线程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间信息传递. 如果在多线程中,给存放数据,也就是修改同一份 ...
- java并发编程(十三)经典问题生产者消费者问题
生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. 这里实现如下情况的生产--消费模型: 生产者不断交替地生产两组数据&q ...
- 【Windows】用信号量实现生产者-消费者模型
线程并发的生产者-消费者模型: 1.两个进程对同一个内存资源进行操作,一个是生产者,一个是消费者. 2.生产者往共享内存资源填充数据,如果区域满,则等待消费者消费数据. 3.消费者从共享内存资源取数据 ...
- 第23章 java线程通信——生产者/消费者模型案例
第23章 java线程通信--生产者/消费者模型案例 1.案例: package com.rocco; /** * 生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二, ...
- Java里的生产者-消费者模型(Producer and Consumer Pattern in Java)
生产者-消费者模型是多线程问题里面的经典问题,也是面试的常见问题.有如下几个常见的实现方法: 1. wait()/notify() 2. lock & condition 3. Blockin ...
- python-实现生产者消费者模型
生产者消费者:包子铺不停的做包子,行人不停的买 ---> 这样就达到了目的--->包子的销售 两个不同的角色 包子铺,行人 只负责单一操作 让包子变成连接的介质. #_*_coding:u ...
- java多线程 生产者消费者模式
package de.bvb; /** * 生产者消费者模式 * 通过 wait() 和 notify() 通信方法实现 * */ public class Test1 { public static ...
随机推荐
- think php 图像加水印
1.将下载好的字体引入至 thinkPHP 框架的public/static 下(这里我建了一个文件夹叫font) (1.) (2.) 2.将字体路径写入config.php中 'font'=&g ...
- Vue-表单验证-全选-反选-删除-批量删除
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- php 23种设计模式 - 设计模式简介以及分类
一. Introduction[介绍] 设计模式:提供了一种广泛的可重用的方式来解决我们日常编程中常常遇见的问题.设计模式并不一定就是一个类库或者第三方框架,它们更多的表现为一种思想并且广泛地应用在系 ...
- Java学习笔记:04面向对象-内部类_访问修饰符_final
04面向对象-内部类/访问修饰符/final 1.static的介绍 static:关键字,静态的 static的作用是用来修饰类中的成员 2.访问一个类中的某一个成员变量 方法一: _1.创建对象 ...
- LGP4141题解
乱 搞 做 法 仅供参考 不会神秘背包技巧怎么办?只会代数爆推怎么办? 发现这个像是一个计数背包然后每次阉割掉一个位置. 考虑做前缀后缀背包然后卷起来,因为考虑成 GF 就是在求 \(\sum_{j= ...
- 朴素版Dijkstra
我们之前介绍的求最短路问题,我们通常会考虑到用BFS算法计算,这里我们将这样对于求最短路问题用不同的算法进行分类: 思路介绍:Dijkstra算法的思路究竟是怎么样的,我们这里先介绍一下朴素版Dijk ...
- Linux项目部署 jdk tomcat 安装配置 linux下 failed connect to localhost:8080;Connection refused
ONBOOT=yes 5.安装wget (1)安装 yum -y install wget (2) 查看版本 wget --version或 wget -V 一.安装jdk 配置 (1)安 ...
- Python 远程开发环境部署与调试
一.下载相应开发工具 Pycharm :下载地址 二.部署开发机 一般在工作过程中,开发环境并不是本地环境,而是指在开发机:因为,有很多依赖本地部署非常麻烦,而开发机中则内置了很多相关的服务 三.代 ...
- WindowsServer域用户批量创建方法
@font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...
- 数据结构-二叉树、B树、B+树、B*树(整理版)
1. 二叉树 二叉树的特点: ① 所有非叶子节点至多拥有两个儿子(Left和Right): ② 所有节点存储一个关键字: ③ 非叶子节点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: ...