java - Guava MapMaker和JDK ConcurrentMap是否使用读/写锁?

标签 java concurrency guava

据我了解,这两个 map 都设计为在多线程环境中工作。但我感兴趣的是它们保证哪些功能(即可用性、一致性)。

最佳答案

我相信它们不使用读锁(依靠 volatile 字段来确保读取看到来自其他线程的写入)并且在内部分解为一定数量的段(基于预期的并发性) level),条目分布在其中,每个条目都使用自己的写锁,与其他条目分开。这样,如果碰巧需要同时写入同一段,则读取永远不会阻塞,而写入只会阻塞。不过我不是这方面的专家。

至于保证,我不确定你在问什么。 ConcurrentMap 指定内存一致性保证:

Memory consistency effects: As with other concurrent collections, actions in a thread prior to placing an object into a ConcurrentMap as a key or value happen-before actions subsequent to the access or removal of that object from the ConcurrentMap in another thread.

关于java - Guava MapMaker和JDK ConcurrentMap是否使用读/写锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6869206/

相关文章:

java - 使用 TreeMap 而不是 HashMap 的 guava multimap?

java - (SPRING) 从 postgresql 数据库获取用户信息并在 thymeleaf html 中打印

java - 在Ant中,目标的任务是否保证按顺序执行?

Java 7 Update 21 Applet 问题

c++ - 发生在同一线程中的关系之前

java - 所有 "objects"一个缓存还是每种类型一个缓存? - 带缓存的网络应用程序( Guava )

serialization - Guava - 可以序列化 Multimap 吗?

java - DBUnit 入门

java - Java中的关键字Volatile在单核机器上强制内存同步吗?

mysql - MySQL中如何控制 session 并发?