java - 具有弱键和身份哈希的 ConcurrentHashMap?

标签 java concurrency weak-references concurrenthashmap

如何在 Java 中获取带有弱键和身份哈希的 ConcurrentHashMap?我认为 Google Guava Collections 可以提供这样的东西,但是我可以从标准库中获取它吗?我还有哪些其他选择?

最佳答案

I think Google Guava Collections can give such a thing, but can I get it from the standard library?

对此的简短回答是否定的。Java SE 没有实现这个特定的组合。

  • 您可以使用 WeakReference 键实例化一个 java.util.concurrent.ConcurrentHashMap,并做一些额外的工作来实现删除损坏引用的映射条目,但这不会为您提供身份哈希语义。

  • 您可以使用 WeakReference 键实例化一个 java.util.IdentityHashMap,并做一些额外的工作来实现删除损坏引用的映射条目,但是不会给你并发行为。

  • 使用 java.util.WeakHashMap 不会为您提供并发或身份哈希。

  • 您可以(理论上)将 key 类包装在覆盖自然 equalshashcode 方法的内容中。但这很可能无法使用。

  • 我认为不可能通过覆盖 ConcurrentHashMapIdentityHashMap 中的方法来做到这一点。


也许唯一可行的选择是更改关键类equalshashcode 方法以基于身份。但这不适用于“内置”键类型(尤其是 final 键类型)或您在应用程序的其他部分需要基于值的 equals/hashcode 的情况。

关于java - 具有弱键和身份哈希的 ConcurrentHashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456742/

相关文章:

Swift - 检查弱变量是否为零或不是线程安全的?

java - 使用 Spring MVC 返回一个 PDF 文件

java - 分片环境下如何管理DB连接池?

concurrency - 共享 self 引用时无法推断出合适的生命周期

ios - 了解保留计数以及在其中访问 self 的 block 。

ios - Objective-C - 使用相同值的两个字典,强值或弱值

java - 在独立 JavaSE 应用程序中与 JAXB 和 Jackson 进行 JSON 绑定(bind)

java - 如果匿名内部类有两个外部类,如何获取外部类的引用?

c++ - 使用 std::atomic<T*> 作为围栏

java - 如何在没有同步块(synchronized block)(即低成本锁)的情况下在一个安全操作中原子地检查 Java 中的两个 AtomicBooleans?