记录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 ...
随机推荐
- 海伦去约会——kNN算法
下午于屋中闲居,于是翻开<机器学习实战>一书看了看“k-邻近算法”的内容,并学习了一位很厉害的博主Jack Cui的代码,自己照着码了一遍.在此感谢博主Jack Cui的知识分享. 一.k ...
- 刘志梅2017710101152.《面向对象程序设计(java)》第十三周学习总结
实验十三 图形界面事件处理技术 实验时间 2018-11-22 1.理论知识 (1)任何支持GUI的操作环境都要不断地监视按键或点击鼠标这样的事件. JAVA这样的面向对象语言,都将事件的相关的信息 ...
- mysql索引总结(转)
mysql索引总结----mysql 索引类型以及创建 文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好 ...
- CentOS7 部署zabbix4.2
zabbix我就不介绍了吧,但是可能又有些小白,我还是介绍一下吧,嘿嘿! 一:什么是zabbix及优缺点(对比cacti和nagios) Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提 ...
- IDEA overwrite报错、languagelevel设置不生效问题
发现idea 倒入项目后,发现@override报错,发现是idea的jdk版本不对,需要设置大于1.5的jdk版本 解决办法: IDEA:File >> Project Structur ...
- 网络通信中tcp多客户端连接
网络编程中的tcp实例太多了,自己也写了好几次(羞愧),今天在想一对一的TCP知道怎么写了,可是一对多的怎么办呢?服务器是如何知道要给那个发送数据呢?做开发的同学应该经常听说uid这个属性.可以为什么 ...
- js Base64 转化成图片格式
function dataURLtoFile(dataurl, filename = 'file') { let arr = dataurl.split(',') let mime = arr[0]. ...
- Spring Boot学习大全(入门)
Spring Boot学习(入门) 1.了解Spring boot Spring boot的官网(https://spring.io),我们需要的一些jar包,配置文件都可以在下载.添置书签后,我自己 ...
- 三、Python-列表
一.序列:是一块用于存放多个值的连续内存空间,并且按一定顺序排列,可以通过索引取值 索引:从左到右的索引从0开始依次增加的正整数:从右到左的索引为-1开始的复数 切片(分片):一中获取序列中的元素的方 ...
- Python第5天
今日学习的主要内容: 数据类型和变量的总结:(可变:列表,字典)(不可变:字符串,数字,元组) 引出集合概念:不同元素,无序,不可变类型 set方法—>集合 add添加:clear清空:pop删 ...