Is there java.util.concurrent equivalent for WeakHashMap?

Can the following piece of code be rewritten w/o using yet maintaining correctness at concurrency? Collections.synchronizedMap()

Collections.synchronizedMap(new WeakHashMap<Class, Object>());

i.e. is there something from java.util.concurrent one can use instead? Note that merely replacing with

new ConcurrentHashMap<Class, Object>(new WeakHashMap<Class, Object>()));

obviously won't work


答案 1

Guava's CacheBuilder class allows you to do this easily.

CacheBuilder.newBuilder().weakKeys().build()

Note that this changes key equality semantics to be instead of which will not matter in your case of using instances but is a potential pitfall.==.equals()Class


答案 2

I don't believe there is. In fact the javadoc suggests using Collections.synchronizedMap()

"Like most collection classes, this class is not synchronized. A synchronized WeakHashMap may be constructed using the Collections.synchronizedMap method."