Guava用法(二)

Guava用法(二)

    Guava的一个比较常见用法就是一个缓冲的用法,下面就是专门介绍这个缓存的具体用法。第一LoadingCache和CacheLoader的区别,前者是专门用来缓存的,后者是定义加载方式,而后者一般会有三种重载方法。

CacheLoader

CacheLoader<Object, Object> baseLoader = new CacheLoader<Object, Object>() {
      @Override
      public Object load(Object key) {
        loadCount.incrementAndGet();
        return new Object();
      }

      @Override
      public ListenableFuture<Object> reload(Object key, Object oldValue) {
        reloadCount.incrementAndGet();
        return Futures.immediateFuture(new Object());
      }

      @Override
      public Map<Object, Object> loadAll(Iterable<? extends Object> keys) {
        loadAllCount.incrementAndGet();
        return ImmutableMap.of();
      }
    };·

      在使用LoadingCache的builder里面可以放入,这个时候可以注意一下的是CacheLoader的第二个,这里的用法很奇特。 

private static class QueuingExecutor implements Executor {
    private LinkedList<Runnable> tasks = Lists.newLinkedList();

    @Override
    public void execute(Runnable task) {
      tasks.add(task);
    }

    private void runNext() {
      tasks.removeFirst().run();
    }
  }

 QueuingExecutor executor = new QueuingExecutor();
    CacheLoader<Object, Object> asyncReloader =
        CacheLoader.asyncReloading(baseLoader, executor);

    结合LoadingCache,这个是后没执行一次reload都会当做一个task,扔到QueuingExecutor的LinkedList里面,需要取得时候必须要使用:

 executor.runNext();

才可以执行掉task的这个任务。 

    LoadingCache,刚刚讲解了和CacheLoader之间的关系,现在开始具体讲解使用方式。

    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
        .recordStats()
        .build(cacheLoader);

    常见的声明就是这种方式,我们可以缓存的具体状态:

CacheStats stats = cache.stats();
stats.missCount();//没有命中的数量
stats.loadSuccessCount();//加载成功数
stats.loadExceptionCount();//加载异常
stats.hitCount();//命中数

    获取key有两种方式get()/getUnchecked(), 其中一个的使用需要,不定义异常情况可以,但CacheLoader声明了检查型异常,就不可以调用getUnchecked(K)。

 cache.get(key);
 cache.getUnchecked(key);

    

 

转载于:https://my.oschina.net/QAAQ/blog/815789

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值