作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个广泛使用大型 HashMap 的程序。它是多线程的,所以我在访问它时使用了读写锁。但是,它有一个我想利用的特殊属性。
将数据“放入”HashMap 后,该数据永远不会改变。曾经。每当对该数据结构的状态进行更改时,它实际上只是创建了新的“一代”结构,而旧结构保持不变。
也就是说,在另一个线程写入值的同时从 HashMap 读取一个值是否安全,因为知道另一个线程永远不会写入您正在写入的值读?是否有一些简单的哈希表结构可以给我这种保证?
最佳答案
不是真的。因为您可以写入它,所以您可能会在这样做时触发基础数组的大小调整。如果您在另一个线程的读取过程中触发调整大小,您真的会扰乱它准确查找数据的能力!
关于Java 并发和 Add-Only HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5711724/
我是一名优秀的程序员,十分优秀!