加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

流数据的理想Java数据结构

发布时间:2020-12-14 19:22:27 所属栏目:Java 来源:网络整理
导读:我有一个特定的用例,但无法确定要使用的正确数据结构. 我有一个线程可以将对象保存到HashMap中.类似于市场数据的东西,你有很高和未知的滴答频率. 另一个线程不断按顺序读取此映射以更新Price对象和查询.对于给定周期中的相同密钥,查询可以是多次.读取和写入

我有一个特定的用例,但无法确定要使用的正确数据结构.

我有一个线程可以将对象保存到HashMap中.类似于市场数据的东西,你有很高和未知的滴答频率.

另一个线程不断按顺序读取此映射以更新Price对象和查询.对于给定周期中的相同密钥,查询可以是多次.读取和写入非常频繁,但读取线程仅对最新可用数据感兴趣,这些数据已完全更新,并且在写入完成之前不一定会阻塞.

我希望您对这种用例的理想数据结构有所了解.是否有比ConcurrentHashMap更好的实现?

谢谢

最佳答案
一种方法是写入时复制方案,如下所示:

public class Prices {
    private volatile Map

这对于获取具有最小的开销 – 从易失性读取,然后是正常的散列查找.但是,它对于put来说有很大的开销 – 创建一个全新的map,以及写一个volatile.如果您的读写比率很高,这可能仍然是一个很好的权衡.

您只需在实际需要添加新条目时更改地图,而不是更新现有条目,就可以改善这一点.你可以通过使用可变值来实现这一点:

public class Prices {
    private volatile Map

我不确定AtomicInteger的性能特征是什么;它可能比看起来慢.假设AtomicInteger不是非常慢,这应该是非常快的 – 它涉及来自volatile的两次读取以及每次get的正常散列查找,以及来自volatile的读取,散列查找以及对volatile的单次写入以进行更新现有价格.它仍然涉及复制地图以增加新价格.但是,在典型的市场中,这种情况并不常发生.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读