是否可以在不使用Collections.synchronizedMap()的情况下重写以下代码,同时保持并发的正确性?
Collections.synchronizedMap(new WeakHashMap<Class, Object>());也就是说,有没有什么来自java.util.concurrent的东西可以替代?请注意,只需将
new ConcurrentHashMap<Class, Object>(new WeakHashMap<Class, Object>()));显然行不通
发布于 2010-02-13 08:38:57
Guava的CacheBuilder类允许您轻松完成此操作。
CacheBuilder.newBuilder().weakKeys().build()请注意,这会将关键相等语义更改为==而不是.equals(),这在使用Class实例的情况下无关紧要,但这是一个潜在的陷阱。
发布于 2010-02-13 08:34:21
我不相信有这回事。事实上,javadoc建议使用Collections.synchronizedMap()
与大多数集合类一样,此类不是同步的。可以使用Collections.synchronizedMap方法构造同步的WeakHashMap。
发布于 2017-10-14 00:04:26
Cafeine是Guava缓存的一个热门竞争对手。
- keys automatically wrapped in weak references
- values automatically wrapped in weak or soft references用法:
LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
.weakKeys()
.weakValues()
.build(key -> createExpensiveGraph(key));https://stackoverflow.com/questions/2255950
复制相似问题