Java并发和仅添加HashMaps

我正在编写一个广泛使用大型HashMaps的程序.它是多线程的,所以我在访问它时使用了读写锁.但是,它有一个我想要利用的特殊属性.

将数据“放入”HashMap后,该数据永远不会更改.永远.每当改变这个数据结构的状态时,它实际上只是创建了一个新的“生成”结构,保留旧的结构.

也就是说,在另一个线程写入值的同时从HashMap读取值是否安全,知道另一个线程永远不会写入您正在读取的值?是否有一些简单的哈希表结构可以给我这种保证?

解决方法:

问题不在于hashmap中的数据,而是在插入内容时修改hashmap本身;它的结构.使用标准HashMap不能同时使用多个线程.

java并发包确实提供了一个线程安全的hashtmap:

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html

在内部,这将使用非锁定的线程安全方法.

上一篇:mysql – 在以下情况下是否需要表锁来维护数据完整性


下一篇:java – 如何禁用JPA的锁定系统?