首页  >  问答  >  正文

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

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

平时我们写代码的时候用得最多的一般是HashMap,也习以为常了

可是Java里有其他的高性能的Map,感觉平时也用不到

百度了一下,只看到了HashMap和ConcurrentHashMap的区别

却不晓得哪些具体的业务使用场景会用到这些类

因此感觉有些茫然,希望前辈能指导一下,谢谢

给我你的怀抱给我你的怀抱2670 天前1165

全部回复(4)我来回复

  • 某草草

    某草草2017-06-28 09:25:10

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

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

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

    回复
    0
  • 欧阳克

    欧阳克2017-06-28 09:25:10

    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() 就会有很多线程同时调用。

    回复
    0
  • 黄舟

    黄舟2017-06-28 09:25:10

    谢邀。

    你得先知道:

    • 在多线程对一个没有保护的对象执行操作会导致大家看到的状态不一致。

    • 你可以开几个线程对一个普通的hashMap去put,remove,前提是在一定条件下,比如里面元素符合一定要求,大于小于等于某个数之类的。

    • ConcurrentHashMap是jdk的并发包中提供的并发map,可以有效防止多线程操作一个对象时出现对象副本不一致。

    场景的话百度可以搜一下。

    回复
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:25:10

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

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

    回复
    0
  • 取消回复