Heim  >  Fragen und Antworten  >  Hauptteil

java - Was sind die spezifischen Geschäftsnutzungsszenarien von Hochleistungsklassen wie ConcurrentHashMap?

Was sind gemäß der Frage die spezifischen Geschäftsnutzungsszenarien von Hochleistungsklassen wie ConcurrentHashMap?

HashMap wird normalerweise am häufigsten verwendet, wenn wir Code schreiben, und wir sind daran gewöhnt

Aber es gibt andere leistungsstarke Karten in Java, und ich habe das Gefühl, dass ich sie normalerweise nicht verwende

Nachdem ich auf Baidu gesucht habe, habe ich nur den Unterschied zwischen HashMap und ConcurrentHashMap gesehen

Aber ich weiß nicht, in welchen spezifischen Geschäftsnutzungsszenarien diese Klassen verwendet werden

Daher bin ich etwas verwirrt. Ich hoffe, die Senioren können mir einen Rat geben, danke

给我你的怀抱给我你的怀抱2670 Tage vor1163

Antworte allen(4)Ich werde antworten

  • 某草草

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

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

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

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

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

    Antwort
    0
  • 黄舟

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

    谢邀。

    你得先知道:

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

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

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

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

    Antwort
    0
  • 巴扎黑

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

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

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

    Antwort
    0
  • StornierenAntwort