javacollectionsguavajava.util.concurrentweakhashmap

Is there java.util.concurrent equivalent for WeakHashMap?


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

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


Solution

  • 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 .equals() which will not matter in your case of using Class instances but is a potential pitfall.