java - 请问像ConcurrentHashMap等高性能的类具体的业务使用场景是哪些?
问题描述
如题,请问像ConcurrentHashMap等高性能的类具体的业务使用场景是哪些?
平时我们写代码的时候用得最多的一般是HashMap,也习以为常了
可是Java里有其他的高性能的Map,感觉平时也用不到
百度了一下,只看到了HashMap和ConcurrentHashMap的区别
却不晓得哪些具体的业务使用场景会用到这些类
因此感觉有些茫然,希望前辈能指导一下,谢谢
问题解答
回答1:ConcurrentHashMap是java.util.concurrent包下防止并发的工具类。业务使用时自己的并发类实现ThreadLocal也行。。。
主要用在多线程中,Java早些版本是使用synchronized同步块的方式,加锁释放等不易解决问题。而现在Java官方全都写好了,看看多线程就知道了。。。
业务场景就比如说公司的人员信息用多线程的方式入库,如果使用java.util.List就会有造成每个线程数据不一致的现象,这时就要用并发工具类了。主要注意 写 数据时,读数据就无所谓了。。。
回答2:ConcurrentHashMap 专门是给多个线程访问的。举个例子:
// 在线用户管理类public class UserManager { private Map<String, User> userMap = new ConcurrentHashMap<>();// 当用户登入时调用 public void onUserSignIn(String sessionId, User user) {this.userMap.put(sessionId, user); }// 当用户登出或超时时调用 public void onUserSignOut(String sessionId) {this.userMap.remove(sessionId); }public getUser(String sessionId) {return this.userMap.get(sessionId); }}
当有很多用户同时登入和登出时,onUserSignIn() 和 onUserSignOut() 就会有很多线程同时调用。
回答3:谢邀。
你得先知道:
在多线程对一个没有保护的对象执行操作会导致大家看到的状态不一致。
你可以开几个线程对一个普通的hashMap去put,remove,前提是在一定条件下,比如里面元素符合一定要求,大于小于等于某个数之类的。
ConcurrentHashMap是jdk的并发包中提供的并发map,可以有效防止多线程操作一个对象时出现对象副本不一致。
场景的话百度可以搜一下。
回答4:区别就不用说了.这些你应该都已经了解了.
为了保证线程安全,我们一般都是用Synchronize关键字,有了ConcurrentHashMap后,你可以不用再使用笨重的Synchronize方法了. 另外ConcurrentHashMap在多线程的情况下,也是一般用在读多写少的情况.不是所有的多线程都可以使用这个并发工具类的.
相关文章:
1. css - 如何使用 vue transition 实现 ios 按钮一样的平滑切换效果2. angular.js - 关于$apply()3. mysql - 把一个表中的数据count更新到另一个表里?4. 网络传输协议 - 以下三种下载方式有什么不同?如何用python模拟下载器下载?5. mysql数据库做关联一般用id还是用户名6. 关于python切片的问题7. linux - 升级到Python3.6后GDB无法正常运行?8. mysql 里边,自增长id,写数据时,是先把数据写进去,然后再给这条数据一个id,还是先给id,然后再把要插入的数据写进去9. 多维数组如何在视图中渲染10. javascript - 前端怎样实现图片剪切一部分上传呢?像微信或者QQ上传那样呢?用的啥技术
