记录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 ...
随机推荐
- 生成器函数_yield_yield from_send
生成器函数 ''' yield类似于return 相同: 都返回出去一个值 不同: yield每次返回时, 会记录当前执行的位置 等下次调用生成器, 会从该位置向下走 return 直接终止函数 '' ...
- var let const
你真的永远都不用var了吗? javascript的一些争论已经浮现出了一些经典的案例,因此,es6的拥护者你们应该讲var遗忘吗?这篇博客将带你走进被遗忘的角落 首先举例反对者的几个观点: 1.如果 ...
- spring面向接口编程
(1)创建一个接口 package com.min.dao; public interface UserDao { public void save(String uname, String pwd) ...
- sublimit 编辑器 设置默认的编码
1.首选项>>设置 - 用户 2.加上:"default_encoding": "UTF-8"
- setsockopt详解
Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, int level, int op ...
- 通过Loadruner对mysql数据库进行增删改查
操作mysql数据库,是在实现mysql数据源配置的基础上操作,可先阅读:loadrunner参数化使用mysql数据源失败解决方法 写之前先理一下,数据库访问流程:打开数据库 --> 数据库 ...
- 嵌入式linux——汇编、C语言基础(一)
一.汇编语言基础 (断断续续的记录自己的笔记...2018-10-11) 1. mov指令 基本用法: mov r0, #0 mov指令是赋值指令,用法如上,把立即数0放入到寄存器r0中. 2. bl ...
- vue.js响应式原理解析与实现
vue.js响应式原理解析与实现 从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很 ...
- 什么是pyc文件,Python
pyc文件就是 Python 程序编译后得到的字节码文件 (py->pyc).pyc文件一般由3个部分组成:最开始4个字节是一个Maigc int, 标识此pyc的版本信息, 不同的版本的 Ma ...
- 2018-2019-2 网络对抗技术 20165304 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165304 Exp4 恶意代码分析 原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或E ...