多线去读取HashMap时此时对HashMap进行Put()是否安全?比如:100个线程实时的去读取一个HashMap,此时突然有一个线程对此Map进行了一次Put这样会对这个HashMap造成多大的影响?

解决方案 »

  1.   

    我的意思是key不发生变化只是对key对应的value进行更改。。这样的话,是出错,还是其他线程读取到被更改后的value?
      

  2.   

    Map m = Collections.synchronizedMap(new HashMap());保证线程安全的创建方式 
      

  3.   

    可能会出错,据说这样hashcode会改变~
      

  4.   

    如果多个线程同时访问一个HashMap,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步.
    如果以LZ所说的情况,一个线程修改了HashMap的结构,那么其他的线程获得这个value值是不具有确定性的。
      

  5.   

    java.util.concurrent .ConcurrentHashMap<K,V> 多线程环境用这东西
      

  6.   

    我今天在分析天乙社区的时候,发现 在系统 启动时,有一个叫 SysConfig的类(后台由HashMap实现)将所有config都读入了这个配置缓存。然后客户端的每次请求都会读取SysConfig(HashMap)。而系统管理员去更改,系统配置的时候,修改SysConfig内部的数据请问像这样的做法会不会出现Exception的情况呢?
    等我今天爬完“香山”后再去分析一下HashMap的源代码哈哈哈~~
      

  7.   

    你的这个说法不仅是针对hashmap这样的集合类,所有的线程调用同一个方法或者数值时都应该用synorcnized,应为程序是不允许2个线程同时调用或者修改一个内存数据的