看HashSet源码可以知道里面就是用HashMap来存储的,HashMap在并发下可能出现的问题:http://www.ticmy.com/?p=97

解决方案 »

  1.   

    多线程操作几乎任何不带锁的类都是不安全的,要么你要自己上锁,要么类有完善的同步机制,不然就是不安全的
    至于具体的类为什么不安全你自己去看类实现源码
    给你打个比方,你应该能基本理解这种“不安全性”
    比如有一个冰箱类,作用和Set差不多,你可以向里面放东西,也可以从里面取东西
    但是“放东西”和“取东西”的动作不是一个时刻发生的事,而是一段时间内发生的事
    你要放东西,不是说瞬间就放好了,比如首先你要打开冰箱门,找到一个合适的位置,然后放进去,最后关门
    同样取东西,你要打开冰箱门,找到你要取的东西,然后拿出来,最后关门
    但是如果两个人,也就是两个线程,想同时操作冰箱,那就可能造成问题,
    比如一个人想放东西,刚把冰箱门打开,还在找位置,突然啪地一下门就被另外一个人关掉了,这时候你怎么隔着冰箱门将东西放进去?
      

  2.   

    hashset其实就是用hashmap实现的。线程不安全集合的存在就是为了在不需要多线程的时候,追求速度的。