为了账号安全,请及时绑定邮箱和手机立即绑定

请问像ConcurrentHashMap等高性能的类具体的业务使用场景是哪些?

请问像ConcurrentHashMap等高性能的类具体的业务使用场景是哪些?

千万里不及你 2019-03-01 10:50:57
如题,请问像ConcurrentHashMap等高性能的类具体的业务使用场景是哪些? 平时我们写代码的时候用得最多的一般是HashMap,也习以为常了 可是Java里有其他的高性能的Map,感觉平时也用不到 百度了一下,只看到了HashMap和ConcurrentHashMap的区别 却不晓得哪些具体的业务使用场景会用到这些类 因此感觉有些茫然,希望前辈能指导一下,谢谢
查看完整描述

7 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

区别就不用说了.这些你应该都已经了解了.

为了保证线程安全,我们一般都是用Synchronize关键字,有了ConcurrentHashMap后,你可以不用再使用笨重的Synchronize方法了. 另外ConcurrentHashMap在多线程的情况下,也是一般用在读多写少的情况.不是所有的多线程都可以使用这个并发工具类的.

查看完整回答
1 反对 回复 2019-03-01
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

集合是可以是线程安全的(面试题刷题的时候经常遇到hashmap和hashtable的区别,所以在遇到多线程的时候第一反应是用hashtable),但是迭代器并不是,在多线程情况下,你要读取数据咋办呢,正在迭代的时候,结构发生了变化,
用ConcurrentHashMap

查看完整回答
1 反对 回复 2019-03-01
?
森林海

TA贡献2011条经验 获得超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() 就会有很多线程同时调用。

查看完整回答
反对 回复 2019-03-01
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

就想其它的答案已经回答的一样,ConcurrentHashMap主要是支持多线程的读写。因为要额外的操作,所以它的性能会低于普通的HashMap,而不是高于。

查看完整回答
反对 回复 2019-03-01
?
FFIVE

TA贡献1797条经验 获得超6个赞

ConcurrentHashMap是java.util.concurrent包下防止并发的工具类。业务使用时自己的并发类实现ThreadLocal也行。。。

主要用在多线程中,Java早些版本是使用synchronized同步块的方式,加锁释放等不易解决问题。而现在Java官方全都写好了,看看多线程就知道了。。。

业务场景就比如说公司的人员信息用多线程的方式入库,如果使用java.util.List就会有造成每个线程数据不一致的现象,这时就要用并发工具类了。主要注意 数据时,读数据就无所谓了。。。

查看完整回答
反对 回复 2019-03-01
?
手掌心

TA贡献1942条经验 获得超3个赞

其实很多,主要是对线程安全有要求的需求,比如对用户的单位时长访问频次限制这个需求。

查看完整回答
反对 回复 2019-03-01
  • 7 回答
  • 0 关注
  • 4226 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信