java – 使用ConcurentHashMap和AtomicInteger作为spring服务类中的实例变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用ConcurentHashMap和AtomicInteger作为spring服务类中的实例变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1372字,纯文字阅读大概需要2分钟。
内容图文
我试图在注入控制器的singleton spring服务中实现ConcurentHashMap的线程安全使用:
@Service
public MyService{
final ConcurrentMap<String, AtomicInteger> myMap = new ConcurrentHashMap<String, AtomicInteger>(10) {
{/* initialize the ten key/values */
}
};
public int add(String key) {
return myMap.get(key).incrementAndGet();
}
// accessed via ajax loop (and controller), if value changes update display
public int getCount(String key) {
return myMap.get(key).get();
}
}
有没有更好的方法来访问线程安全的哈希映射?我怎样才能使其适应集群环境?这是一个高达my other question.的后续行动
解决方法:
我的目的不是要回答问题esp.因为我没有集中情况的专业知识;但是,我想指出我认为值得注意的事情.
@JB Nizet在其中一条评论中提到代码是线程安全且正确的.我想基于Java API Reference添加但不一致:
Retrieval operations (including get) generally do not block, so may
overlap with update operations (including put and remove)
这意味着当一些更新当前正在运行时,可能有客户端获取此信息.而且,这是有道理的,因为你在代码中提到’循环’.所以,如果这对你的情况不重要,那么一切都应该没问题.
但是,如果你需要更严格,我想也许使用ReentrantReadWriteLock的实例将是一个不错的选择.锁定使您的代码能够阻止所有读取请求,直到有可用信息的一致快照.您可能正在使用getCount方法上的锁来严格阻塞,直到add方法释放所有等待代码中使用的映射的一致快照的锁.
我还猜测,当您将其迁移到集群解决方案时,同样的问题是有效的;如果跨不同的集群节点需要一致性,那么应该注意它.
内容总结
以上是互联网集市为您收集整理的java – 使用ConcurentHashMap和AtomicInteger作为spring服务类中的实例变量全部内容,希望文章能够帮你解决java – 使用ConcurentHashMap和AtomicInteger作为spring服务类中的实例变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。