ConcurrentHashMap和HashMap的一點區別

劍握在手發表於2016-12-27

 

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

相關文章