关于java中collection提供的同步容器方法
最近看kafka的设计,发现在abstractConfig中使用了 Collections.synchronizedSet(new HashSet<String>()) ,字面上能够理解,在原来hashset上面做了一层包装,在源代码中有Returns a synchronized (thread-safe) set backed by the specified set.的注释, 大部分实现在synchronizedCollection中,但是,有并法包的存在,那么,还用这种容器方法做什么呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
这是防止并发的情况,如:遍历的同时又在删除数据
kafka的源代码里面再用,不知道他们是怎么想的
kafka的源代码里面现在再用,不知道他们是怎么想的
回复
要不是为了在低版本的JVM上运行,要不就是认为此处竞争并不激烈,没必要用分段锁
@逝水fox 低版本的JVM?这个回答不错,竞争激烈不同程度的情况下,使用不同的同步容器方法,不同情况下,两者的代价会有超越,是这个意思吗?
@徐建海 kafka的设计里面metrics的实现中有 private final ConcurrentMap<MetricName, KafkaMetric> metrics;的设计,那么,向下兼容的论断就不成立了
这个方法出现在并发包之前