为什么hashtable 可以线程安全而hashmap 不可以!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    因为HashMap的get,set等方法都没有synchronized.
    http://topic.csdn.net/u/20071108/23/4B767F31-3238-461F-93C9-ED9D26CF2133.html
      

  2.   

    忘了上面是java板块的,不过也可以参考一下。
      

  3.   

    是不是hashtable  内置了锁?
      

  4.   

    Hashtable 是线程安全的,可由多个读取器线程或一个写入线程使用。多线程使用时,如果任何一个线程执行写入(更新)操作,它都不是线程安全的。若要支持多个编写器,如果没有任何线程在读取 Hashtable 对象,则对 Hashtable 的所有操作都必须通过 Synchronized 方法返回的包装完成。从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使一个集合已进行同步,其他线程仍可以修改该集合,这将导致枚举数引发异常。若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。
    http://msdn.microsoft.com/zh-cn/library/system.collections.hashtable(VS.80).aspx
      

  5.   

    那就是基于.net 框架的了~ 内部已经封闭了锁操作~