版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kang_xuan/article/details/93979517
本文章仅为个人理解,如有错误请指正。 从.Net .0框架开始,在System.Collections.Concurrent命名空间下,增加了用于多线程协同的并发集合类(线程安全集合)。 线程安全集合:
就是当多线程访问时,采用了加锁的机制;即当一个线程访问集合时,会对这个集合进行保护,其他线程不能对其访问,直到该线程操作完集合之后,其他线程才可以使用。防止出现数据不一致或者数据被污染的情况。 只能保证集合的原子性、可见性,但是无法保证对集合操作的有序性,例如:多个线程同时将元素加入到集合,无法保证元素加入到集合的顺序,多次运行情况结果会不同。 BlockingCollection<T>
提供具有阻塞和限制功能的线程安全集合,实现IProducerConsumerCollection<T>接口。支持容量大小的限制和完成添加限制,当标记为完成添加后只允许移除(Take)操作,无法进行添加(Add)操作。 BoundedCapacity:获取集合限定容量,在通过构造函数时可以指定集合的容量大小。 IsAddingCompleted:判断是否已经标记完成添加, IsCompleted:判断是否标记完成添加并且为空。 Add:将项添加到集合中。 CompleteAdding:将集合标记为完成添加。调用该函数后IsAddingCompleted为true,如果集合中包含的项数为0,那么IsCompleted也为true。 Take:从集合中移除一项。 TryAdd:尝试将项加入集合 TryTake:尝试从集合中移除项。 ConcurrentBag<T>
提供可供多个线程同时安全访问的无序包。对应非泛型列表List<T>。 包(Bag)和数据上的集(Set)的区别是包可包含重复元素,而集中不能包含重复元素。 Count:获取无序包中的元素数量 IsEmpty:判断无序包是否为空。 TryPeek:从无序包中获取一个元素,但不进行移除。 TryTask:从无序包获取一个元素并移除。 ConcurrentDictionary<TKey,TValue>
提供可供多线程同时访问的键值对的线程安全集合,对应Dictionary<TKey, TValue>。 IsEmpty:判断字典是否为空。 AddOrUpdate:将键值对添加到字典中,如果Key值已经存在,则更新Value值。 Clear:将所有键值对从字典中移除。 GetOrAdd:如果键不存在,则将键值对添加到字典中并返回Value值,如果键已经存在,则返回现有值,不会更新现有值。 TryUpdate:尝试更新键对应的Value值。 ConcurrentQueue<T>
队列,提供线程安全的先进先出(FIFO)集合,对应Queue<T>。 Enqueue:将对象添加到队列末尾处。 TryDequeue:尝试移除并返回位于队列开头处的对象。 TryPeek:尝试返回队列开头处的对象但不将其移除。 ConcurrentStack<T>
栈,提供线程安全的后进先出(LIFO)集合,对应Stack<T> Push:将对象插入栈顶部。 PushRange:将多个对象插入栈的顶部。 TryPeek:尝试返回栈顶部的对象但不将其移除。 TryPop:尝试弹出并返回栈顶部的对象。 TryPopRange:尝试弹出并返回栈顶部的多个对象。
————————————————
版权声明:本文为CSDN博主「玄之」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kang_xuan/article/details/93979517

最新文章

  1. 从大公司做.NET 开发跳槽后来到小公司的做.NET移动端微信开发的个人感慨
  2. Android使用的设计模式1——观察者模式
  3. Http、tcp、Socket连接区别
  4. UDP TCP应用场景
  5. java中实现查看今天是星期几的代码实现
  6. iOS协议
  7. 【百度地图API】批量地址解析与批量反地址解析(带商圈数据)
  8. spring4+srpingmvc+mybatis基本框架(app后台框架搭建一)
  9. css文本强制一行 字间距
  10. Python——合并指定文件夹下的所有excel文件
  11. 仓储模式Repository的选择与设计
  12. Scratch 数字游戏
  13. Java NIO系列教程(八)JDK AIO编程
  14. 大道至简、大智若愚—GO语言最佳详解实践
  15. USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- BDM Construction and Firmware
  16. ubuntu 12.04下编译安装nginx-1.9.3
  17. Unity寻路的动态烘焙
  18. Servlet是单例的吗?
  19. 解决php收邮件乱码问题
  20. Tensorboard教程:显示计算图中节点信息

热门文章

  1. 查看 SharePoint Server 中的所有网站集
  2. 个人的web商城网站
  3. 多组件共享-vuex —— 使用vuex 报错 actions should be function or object with ”handler“
  4. Java-UploadHelper工具类
  5. Codeforces 839E Mother of Dragons
  6. 交换机配置——STP实验(指定特定交换机为根桥)
  7. Hibernate 5 开始使用指南前言
  8. 51 Nod 1352 集合计数
  9. docker打包flask简单程序
  10. ValueError: Cannot assign &quot;\&lt;QuerySet [&lt;Area: China&gt;]\&gt;&quot;: &quot;Area.parent&quot; must be a &quot;Area&quot; instance.