À l'aide de Goyave pour la haute performance thread-safe de la mise en cache

Je suis en train de mettre en œuvre une haute performance de thread-safe de la mise en cache. Voici le code que j'ai mis en œuvre. Je ne veux pas tout sur l'informatique à la demande. Puis-je utiliser le cache.asMap() et récupérer la valeur en toute sécurité? Même si le cache est configuré pour n'avoir softValues?

  import java.io.IOException;
  import java.util.concurrent.ConcurrentMap;
  import java.util.concurrent.ExecutionException;
  import java.util.concurrent.TimeUnit;
  import java.util.concurrent.TimeoutException;

  import com.google.common.cache.Cache;
  import com.google.common.cache.CacheBuilder;

  public class MemoryCache {

    private static MemoryCache instance;
    private Cache<String, Object> cache;

    private MemoryCache(int concurrencyLevel, int expiration, int size) throws IOException {

        cache = CacheBuilder.newBuilder().concurrencyLevel(concurrencyLevel).maximumSize(size).softValues()
            .expireAfterWrite(expiration, TimeUnit.SECONDS).build();
    }

    static public synchronized MemoryCache getInstance() throws IOException {
        if (instance == null) {
               instance = new MemoryCache(10000, 3600,1000000);
        }
        return instance;
    }

    public Object get(String key) {
        ConcurrentMap<String,Object> map =cache.asMap();
        return map.get(key);
    }

    public void put(String key, Object obj) {
        cache.put(key, obj);
    }
   }
Comme une curiosité, avez-vous vraiment attendre d'avoir 10000 threads d'accéder à votre Cache en même temps? Je demande car c'est la valeur que vous utilisez comme un niveau de simultanéité.
Non, je n'ai supprimé que paramètre. Je suis maintenant en utilisant la valeur par défaut de simultanéité niveau c'est à dire 4. Merci pour le signaler.

OriginalL'auteur systemboot | 2012-06-20