记录Queue插入的时候报错
Queue 队列 特性 先进先出 和栈 Stack 非常相似 不过 栈 遵循 后进先出
Queue 和Stack 都存在数据并发的 问题
public static Queue<Person> queue = new Queue<Person>(); //定义一个队列 先进先出 存在并发风险
public static Stack<Person> stack = new Stack<Person>(); //定义一个栈 后进先出 存在并发风险
static void Main(string[] args)
{ Task[] task=new Task[];
for (int i = ; i < ; i++)
{
task[i] = new Task(RuDui);
task[i].Start();
}
Task.WaitAll(task);
Console.WriteLine(queue.Count);
Console.WriteLine(stack.Count); } public static void RuDui()
{ Parallel.For(, , (i) =>
{
Person person = new Person()
{
Name = "测试" + i,
Age = ,
Address = "河南郑州市" + i
}; queue.Enqueue(person);
stack.Push(person);
}); }
执行结果如下 甚至会报错 : 目标数据的长度不够 ,请检查 destIndex 和长度 一级数组的下限
解决的办法也很简单 : lock 锁
lock(o){
queue.Enqueue(person);
stack.Push(person);
}
另外一种解决办法, 用 ConcurrentQueue 和 ConcurrentStack
private static object o = new object();
//.net 4.0 以后 微软提供了线程安全的先进先出 集合 无需考虑并发
public static ConcurrentQueue<Person> conQueue = new ConcurrentQueue<Person>();
public static ConcurrentStack<Person> conStack = new ConcurrentStack<Person>();
public static Queue<Person> queue = new Queue<Person>(); //定义一个队列 先进先出 存在并发风险
public static Stack<Person> stack = new Stack<Person>(); //定义一个栈 后进先出 存在并发风险
static void Main(string[] args)
{
Task[] task=new Task[];
for (int i = ; i < ; i++)
{
task[i] = new Task(RuDui);
task[i].Start();
}
Task.WaitAll(task);
Console.WriteLine(queue.Count);
Console.WriteLine(stack.Count);
Console.WriteLine(conQueue.Count);
Console.WriteLine(conStack.Count);
}
public static void RuDui()
{
Parallel.For(, , (i) =>
{
Person person = new Person()
{
Name = "测试" + i,
Age = ,
Address = "河南郑州市" + i
};
lock(o){
queue.Enqueue(person);
stack.Push(person);
}
conQueue.Enqueue(person);
conStack.Push(person);
});
}
最终输出结果

记录Queue插入的时候报错的更多相关文章
- Queue插入的时候报错:源数组长度不足。请检查 srcIndex 和长度以及数组的下限。
异常问题记录: 本想自己手动实现一个日志记录功能.使用Queue队列集合来实现多线程的日志记录. 测试 一个线程写入数据Enqueue和一个线程读取数据Dequeue ,直接用的无休眠死循环. 终于抛 ...
- MYSQL timestamp NOT NULL插入NULL的报错问题
1. 在开发两个数据库数据同步功能的时候,需要在本地搭建一个本地的数据库作为一个本地库,然后用于同步开发库中的数据.在插入的时候出现了一个问题. 问题描述: 我们每张表中都会存在一个create_ti ...
- Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法
一.写sql的方式插入到Oracle中 往oracle中插入时间 '2007-12-28 10:07:24'如果直接按照字符串方式,或者,直接使用to_date('2007-12-28 10:07: ...
- 插入mysql语句报错:1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
插入一个很简单的sql语句时候,mysql一直报错: [SQL] INSERT INTO ORDER ( id, activity_id, order_type, phone, order_amoun ...
- MySql数据库插入或更新报错:Cannot add or update a child row: a foreign key constraint fails
具体报错信息: Cannot add or update a child row: a foreign key constraint fails (`xxx`.`AAA`, CONSTRAINT `t ...
- Idea使用记录--添加Problems&&解决Autowired报错could not autowire
今天在使用Idea的时候,发现Idea在整个每次找到错误代码非常不方便(Idea如果类中有错误,没有打开过类并不会提示,比如构建工程后缺少jar包问题).我想快速看到工程哪里出问题类似于eclipse ...
- ionic3.x版本开发问题记录---使用Image Resizer打包报错问题
按照官方文档安装和使用,最后在打包的时候报错 /platforms/android/src/info/protonet/imageresizer/ImageResizer.java:12: error ...
- Nuxt.js 踩坑记录,(1)引入fs包报错
今天又是码农的一天. 但是写着写着,不知道为啥就页面就报错了, 如图所示,我在db/app.js下引入了fs这个模块,提示我npm install,我也照做了,但是仍然报错. 通过各种百度,踩坑,最终 ...
- 大量数据通过Phoenix插入到hbase报错记录(2)
错误: Caused by: java.sql.SQLException: ERROR (INT10): Unable to find cached index metadata 解决办法: 在hba ...
随机推荐
- 在线学习在CTR上应用的综述
参考:https://mp.weixin.qq.com/s/p10_OVVmlcc1dGHNsYMQwA 在线学习只是一个机器学习的范式(paradigm),并不局限于特定的问题,模型或者算法. 架构 ...
- SpringBoot 配置文件 中文乱码
本方案,支持springboot 很简单 在配置文件中不写中文,写中文的ascll码 直接百度在线转ASCII,用工具 把中文转ASCII码==>\u628a\u4e2d\u6587\u8f6c ...
- sass 和less 分别在循环 和超出省略方面的区别!
这两天在迁项目,新项目支持less预处理器,之前是采用的sass,就出现一些冲突,好在有对应的转换方式,重点说下 我遇到的2个问题 1:超出省略 sass: 声明: 在需要的地方: less: 在使用 ...
- 巨坑– 膜BWV543
我不是一个喜欢膜别人的人,我从来都不擅长去夸奖.当面对巴赫的作品时,我发现我的敬佩难以用语言表达.我决定用另一种方式来表达我的欣赏,那就是分析并背下这个谱子. http://music.163.com ...
- FTP学习笔记
FTP有两个连接方式 1.控制连接 2.数据连接 控制链接 标准端口为21 用于数据传输中的控制 数据连接 标准端口20 用于数据传输中的上传 下载数据 数据传输的连接方式,主动连接 被动连接. ...
- 最简单打开三星s8+usb调试模式的步骤
就在我们使用安卓手机通过数据线链接到PC的时候,如果手机没有开启usb开发者调试模式,PC则没能够成功读到我们的手机,部分app也没能够正常使用,遇到这个情况我们需要找解决方法将手机的usb开发者调试 ...
- mongodb mac
==> mongodb To have launchd start mongodb now and restart at login: brew services start mongodb O ...
- 页面中dropDownListt的二级关联
当下拉框选项不多,而且可以写死的情况下,用js在页面写可能更方便. 我的html代码如下,两个关联是下拉框:配件类型.子类型. <div class="col-md-3 col-sm- ...
- Exp4 恶意代码分析 20164313 杜桂鑫
1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,sys ...
- 转载:消息队列MQ
本文大概围绕如下几点进行阐述: 为什么使用消息队列? 使用消息队列有什么缺点? 消息队列如何选型? 如何保证消息队列是高可用的? 如何保证消息不被重复消费? 如何保证消费的可靠性传输? 如何保证消息的 ...