1. 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
  2. 本文链接:https://blog.csdn.net/kang_xuan/article/details/93979517
  3. 本文章仅为个人理解,如有错误请指正。
  4.  
  5. 从.Net .0框架开始,在System.Collections.Concurrent命名空间下,增加了用于多线程协同的并发集合类(线程安全集合)。
  6.  
  7. 线程安全集合:
  8. 就是当多线程访问时,采用了加锁的机制;即当一个线程访问集合时,会对这个集合进行保护,其他线程不能对其访问,直到该线程操作完集合之后,其他线程才可以使用。防止出现数据不一致或者数据被污染的情况。
  9.  
  10. 只能保证集合的原子性、可见性,但是无法保证对集合操作的有序性,例如:多个线程同时将元素加入到集合,无法保证元素加入到集合的顺序,多次运行情况结果会不同。
  11.  
  12. BlockingCollection<T>
  13. 提供具有阻塞和限制功能的线程安全集合,实现IProducerConsumerCollection<T>接口。支持容量大小的限制和完成添加限制,当标记为完成添加后只允许移除(Take)操作,无法进行添加(Add)操作。
  14.  
  15. BoundedCapacity:获取集合限定容量,在通过构造函数时可以指定集合的容量大小。
  16.  
  17. IsAddingCompleted:判断是否已经标记完成添加,
  18.  
  19. IsCompleted:判断是否标记完成添加并且为空。
  20.  
  21. Add:将项添加到集合中。
  22.  
  23. CompleteAdding:将集合标记为完成添加。调用该函数后IsAddingCompletedtrue,如果集合中包含的项数为0,那么IsCompleted也为true
  24.  
  25. Take:从集合中移除一项。
  26.  
  27. TryAdd:尝试将项加入集合
  28.  
  29. TryTake:尝试从集合中移除项。
  30.  
  31. ConcurrentBag<T>
  32. 提供可供多个线程同时安全访问的无序包。对应非泛型列表List<T>。
  33.  
  34. 包(Bag)和数据上的集(Set)的区别是包可包含重复元素,而集中不能包含重复元素。
  35.  
  36. Count:获取无序包中的元素数量
  37.  
  38. IsEmpty:判断无序包是否为空。
  39.  
  40. TryPeek:从无序包中获取一个元素,但不进行移除。
  41.  
  42. TryTask:从无序包获取一个元素并移除。
  43.  
  44. ConcurrentDictionary<TKey,TValue>
  45. 提供可供多线程同时访问的键值对的线程安全集合,对应Dictionary<TKey, TValue>。
  46.  
  47. IsEmpty:判断字典是否为空。
  48.  
  49. AddOrUpdate:将键值对添加到字典中,如果Key值已经存在,则更新Value值。
  50.  
  51. Clear:将所有键值对从字典中移除。
  52.  
  53. GetOrAdd:如果键不存在,则将键值对添加到字典中并返回Value值,如果键已经存在,则返回现有值,不会更新现有值。
  54.  
  55. TryUpdate:尝试更新键对应的Value值。
  56.  
  57. ConcurrentQueue<T>
  58. 队列,提供线程安全的先进先出(FIFO)集合,对应Queue<T>。
  59.  
  60. Enqueue:将对象添加到队列末尾处。
  61.  
  62. TryDequeue:尝试移除并返回位于队列开头处的对象。
  63.  
  64. TryPeek:尝试返回队列开头处的对象但不将其移除。
  65.  
  66. ConcurrentStack<T>
  67. 栈,提供线程安全的后进先出(LIFO)集合,对应Stack<T>
  68.  
  69. Push:将对象插入栈顶部。
  70.  
  71. PushRange:将多个对象插入栈的顶部。
  72.  
  73. TryPeek:尝试返回栈顶部的对象但不将其移除。
  74.  
  75. TryPop:尝试弹出并返回栈顶部的对象。
  76.  
  77. TryPopRange:尝试弹出并返回栈顶部的多个对象。
  78. ————————————————
  79. 版权声明:本文为CSDN博主「玄之」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
  80. 原文链接:https://blog.csdn.net/kang_xuan/article/details/93979517

C# 线程安全集合类的更多相关文章

  1. C# 中的线程安全集合类

    C# 的集合类型中, 都有Synchronized静态方法, 和SyncRoot实例方法 对于ArrayList以及Hashtable 集合类来讲,当需要做到线程安全的时候,最好利用其自带的属性Syn ...

  2. .NET Framework 4 中的并行编程9---线程安全集合类

    原文转载自:http://www.cnblogs.com/xray2005/archive/2011/10/11/2206745.html 在.Net 4中,新增System.Collections. ...

  3. 自定义Dictionary支持线程安全

    本文转载:http://www.cnblogs.com/kiddo/archive/2008/09/25/1299089.html 我们说一个数据结构是线程安全指的是同一时间只有一个线程可以改写它.这 ...

  4. java 集合类基础问题汇总

     1.Java集合类框架的基本接口有哪些? 参考答案 集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序.有的集合类允许重复的键,有些不允许 ...

  5. .Net多线程之线程安全

    ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单线程版本( ...

  6. 线程并发线程安全介绍及java.util.concurrent包下类介绍

    线程Thread,在Java开发中多线程是必不可少的,但是真正能用好的并不多! 首先开启一个线程三种方式 ①new Thread(Runnable).start() ②thread.start(); ...

  7. Java集合类面试题

    java.util包中包含了一系列重要的集合类,而对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式. 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最 ...

  8. .net core 和 WPF 开发升讯威在线客服与营销系统:使用线程安全的 BlockingCollection 实现高性能的数据处理

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...

  9. 并发编程-线程池&J.U.C

    8. 共享模型之工具 8.1 线程池 池化技术相比大家已经屡见不鲜了,线程池.数据库连接池.Http 连接池等等都是对这个思想的应用.池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率 ...

随机推荐

  1. java8 stream().map().collect()用法

    有一个集合: List<User> users = getList(); //从数据库查询的用户集合 现在想获取User的身份证号码:在后续的逻辑处理中要用: 常用的方法我们大家都知道,用 ...

  2. eclipse+springboot+tomcat自带的部署

    最近在看微服务,然后整理了两个springboot.但执行都是内部main执行,想着后期应该会用到tomcat,大部分都是说的打成war包,然后部署到tomcat上. war包的方式就不说了,网上很多 ...

  3. Oracle修改表,提示“资源正忙,要求指定NOWAIT”

    今天往一个表里面多增加了两个字段,修改完毕,保存的时候,提示如下内容:“资源正忙,要求指定nowait”.重试好几遍,都没有解决,于是搜索了一下,找到了解决方法,如下: 首先执行下面一段代码,得到锁定 ...

  4. linux系统常用命令(一)

    管理 在UNIX/linux系统中,一切皆为文件:若非文件,则为进程.首先认识文件系统: linux文件系统 /var - 经常变化的(variable)文件,诸如日志或数据库等 /usr - 包含绝 ...

  5. 几台WEB经常宕机,求分析原因

    几台WEB服务器经常宕机,平时运行得好好的,负载也都在2以下,偶尔会突然负高上去就宕机,init 6也无法重启成功 只能echo 'b'>/proc/sysrq-trigger 硬重启才行,dm ...

  6. MySQL用户

    创建用户 在对 MySQL 的日常管理和实际操作中,为了避免用户恶意冒名使用 root 账号控制数据库,通常需要创建一系列具备适当权限的账号,应该尽可能地不用或少用 root 账号登录系统,以此来确保 ...

  7. .net上传超大文件解决方案

    HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...

  8. vue中单选框与多选框的实现与美化

    我们在做一些页面时,可能会用到很多的单选框和复选框,但是原生的radio和checkbox前面的原型图标或方框样式不尽人意.于是,决定自己来实现单选框和复选框.我用的是vue,所以就用vue的方式实现 ...

  9. Apache 服务器 首次访问特别慢的解决过程,php环境

    一台服务器之前装的是java的tomcat apache 项目, 后面装了个phpstudy 在上面,访问php项目发现 浏览器首次打开网页需要7-8秒,打开成功后连续访问都很快,过一段时间访问又是7 ...

  10. From 7.8 To 7.14

    From 7.8 To 7.14 大纲 学科 英语的话每天早上背单词, 争取每天做一篇完型, 一篇阅读, 一篇短文填空, 一篇改错, 一篇七选五??? 似乎太多了, 先试一下吧 语文的话, 尝试翻译一 ...