首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有记录级别锁定的集合?

具有记录级别锁定的集合?
EN

Stack Overflow用户
提问于 2020-11-14 02:04:42
回答 1查看 55关注 0票数 1

我需要用用户名键化一个数据结构,然后在POJO中设置一些数据(额外的集合)。数据需要线程安全。

所以我在考虑主要的结构,ConcurrentHashMap<String, MyPOJO>。对于我需要在MyPOJO上执行的操作,我可以直接读取它,也可以对它执行写操作。

最好的方法是在映射中获取,然后在同步块中对MyPOJO进行操作吗?我假设我只需要在update方法中放置一个同步块,那么读取方法就会自动被阻塞吗?这是高并发应用程序中最好的方法吗?还是需要在get/set操作中使用类似于ReadWriteLock的操作?

如果我使用类似于StampedLock的东西,那么每个MyPOJO都需要一个正确的,这样我就可以进行记录级别锁定了吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-14 02:36:39

最好的方法是在地图上获取数据,然后在synchronized块中对MyPOJO进行操作吗?

我假设您指的是MyPOJO实例本身上的一个MyPOJO块(或实例拥有的私有锁)。

如果你做得对,我的回答是肯定的。

我假设我只需要在update方法中放置一个synchronized块,那么读取方法就会自动被阻塞吗?

不,那不对。访问或更新可变对象的所有方法都需要在同一锁上同步。

如果您不同步读和写,您将面临各种各样的线程安全问题,包括写的可见性问题。海生虫。

是高度并发应用程序中最好的方法吗?还是需要在get/set操作中使用类似于ReadWriteLock的操作?

那得看情况。

关于ReadWriteLock问题:

  • ,除非您有可能在特定的MyPOJO实例上获得显著的锁争用,否则可能不值得对此进行优化。

如果访问和更新方法只在相对较短的时间内保持锁,则会减少任何争用的影响。

更广泛地说,我怀疑您可能混淆了“高度并发”和“高度可伸缩性”。Java多线程只能在一台机器上执行最高限度的内核(和内存)。除此之外,通过巧妙的调整来提高并发性,你将一事无成。为了进一步扩展,您需要更改系统架构,以便由不同机器上的多个JVM实例处理请求。

所以..。总之,如果您对单个MyPOJO实例有重大争议,并且可能会对单个实例进行大量并行读取操作,那么.MyPOJO可能会有所帮助。

--如果我使用类似于StampedLock的东西,每个MyPOJO都需要一个正确的,这样我就可以进行记录级别锁定了?

除非你有很大的争议,否则我怀疑是否会有很大的好处;见上文。但是是的,如果你在每个实例中使用一个StampedLock,你就会得到记录级的锁定.就像你会对每个实例进行锁定一样。

FWIW:这闻起来有点“过早优化”的味道。此外,如果您预期您的解决方案在短期到中期内需要扩展到单个JVM之外,那么过度优化单个JVM解决方案无疑是浪费时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64830254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档