为什么Collections. generic . queue没有同步方法,而Collections. generic

本文关键字:Collections generic 同步方法 queue 为什么 | 更新日期: 2023-09-27 17:50:41

System.Collections.Queue类有Queue.Synchronized方法,它返回一个线程安全的Queue实现。

而通用的System.Collections.Generic.Queue没有Synchronized方法。在这一点上,我有两个问题:

  1. 为什么通用的没有这个方法?这是一个框架API设计决策吗?
  2. Queue.Synchronized返回的队列如何与ConcurrentQueue<T>类不同?

谢谢。

为什么Collections. generic . queue没有同步方法,而Collections. generic

Synchronized()方法返回一个包装器队列,该队列在每个方法周围设置一个锁。
在编写多线程应用程序时,这种模式实际上并不有用。

大多数实际使用模式都不会受益于同步集合;它们仍然需要锁来保护更高级的操作。

因此,System.Collections中的Synchronized()方法实际上是一个陷阱,它会引导人们编写非线程安全的代码。


ConcurrentQueue<T>类是专门为并发应用程序设计的,它包含了自动修改队列的有用方法。

并发集合包只包含在多线程环境中有意义的方法(例如TryDequeue());它们将帮助你编写线程安全的代码。

这就是所谓的成功之坑。

更多信息,请看我的博客

相关文章: