zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    一个界面描述标签的想法
    使用MyGeneration创建模板:介绍(翻译)
    ICE:C#和Java共同的服务器
    Spring.NET 快速入门 (翻译)
    TSQL命令在SQLServer查询中的运用
    SQL数据库修复
    区分汉字和字母的函数
    如何生成静态页
    delphi 开发扩展(一)
    20072008
  • 原文地址:https://www.cnblogs.com/flying607/p/6225562.html
Copyright © 2011-2022 走看看