流数据的理想Java数据结构

前端之家收集整理的这篇文章主要介绍了流数据的理想Java数据结构前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

谢谢

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

public class Prices {
    private volatile Map

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

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

public class Prices {
    private volatile Map

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

猜你在找的Java相关文章