为什么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
方法。在这一点上,我有两个问题:
- 为什么通用的没有这个方法?这是一个框架API设计决策吗?
- 从
Queue.Synchronized
返回的队列如何与ConcurrentQueue<T>
类不同?
谢谢。
Synchronized()
方法返回一个包装器队列,该队列在每个方法周围设置一个锁。
在编写多线程应用程序时,这种模式实际上并不有用。
大多数实际使用模式都不会受益于同步集合;它们仍然需要锁来保护更高级的操作。
因此,System.Collections
中的Synchronized()
方法实际上是一个陷阱,它会引导人们编写非线程安全的代码。
ConcurrentQueue<T>
类是专门为并发应用程序设计的,它包含了自动修改队列的有用方法。
并发集合包只包含在多线程环境中有意义的方法(例如TryDequeue()
);它们将帮助你编写线程安全的代码。
这就是所谓的成功之坑。
更多信息,请看我的博客