我正在编写一个广泛使用大型HashMaps的程序.它是多线程的,所以我在访问它时使用了读写锁.但是,它有一个我想要利用的特殊属性.
将数据“放入”HashMap后,该数据永远不会更改.永远.每当改变这个数据结构的状态时,它实际上只是创建了一个新的“生成”结构,保留旧的结构.
也就是说,在另一个线程写入值的同时从HashMap读取值是否安全,知道另一个线程永远不会写入您正在读取的值?是否有一些简单的哈希表结构可以给我这种保证?
解决方法:
问题不在于hashmap中的数据,而是在插入内容时修改hashmap本身;它的结构.使用标准HashMap不能同时使用多个线程.
java并发包确实提供了一个线程安全的hashtmap:
http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html
在内部,这将使用非锁定的线程安全方法.