ConcurrentHashMap和HashMap的一点区别

HashMap不是线程安全的,ConcurrentHashMap则在某一个方法的执行上是线程安全的。

package testMap;

import java.util.HashMap;

public class TestHashMapSync {
public static final HashMap<String, String> map=new HashMap<String, String>();
    
    public static void main(String[] args) throws InterruptedException {
        
        Thread t1=new Thread(){
            public void run() {
                for(int i=0;i<25;i++){
                    map.put(String.valueOf(i), String.valueOf(i));
                }
            }
        };
        
        Thread t2=new Thread(){
            public void run() {
                for(int j=25;j<50;j++){
                    map.put(String.valueOf(j), String.valueOf(j));
                }
            }
        };
        
        t1.start();
        t2.start();
        
        //等待线程结束
        t1.join();
        t2.join();
        
        for(int l=0;l<50;l++){
            //如果key和value不同,说明在两个线程put的过程中出现异常。
            if(!String.valueOf(l).equals(map.get(String.valueOf(l)))){
                System.err.println(String.valueOf(l)+":"+map.get(String.valueOf(l)));
            }
        }
        
    }

}

如果是HashMap,put的时候两个线程有一定机率互相干扰,如果是ConcurrentHashMap,则不会干扰。

以上代码HashMap改为ConcurrentHashMap就不会异常了。


详细信息可以参考一下这篇博客:http://blog.csdn.net/weibin_6388/article/details/43231207

原文地址:https://www.cnblogs.com/flying607/p/6225562.html