`

guava测试例子,取值和定时重新装载

阅读更多
package com.taobao.saleengine.core.processor.onlinelearning.service.impl;

import static com.google.common.base.Preconditions.checkNotNull;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;

public class Test {

    public static void main(String[] args) {
        final Test xx = new Test();
        Thread t = new Thread("aaa") {
            public void run() {
                try {
                    System.out.println("0秒");
                    System.out.println(xx.get("1"));
                    System.out.println(xx.get("2"));
                    System.out.println(xx.get("3"));
                    System.out.println(xx.get("4"));
                    System.out.println(xx.get("5"));
                    Thread.sleep(20 * 1000);
                    System.out.println("20秒");
                    System.out.println(xx.get("1"));
                    System.out.println(xx.get("2"));
                    System.out.println(xx.get("3"));
                    System.out.println(xx.get("4"));
                    System.out.println(xx.get("5"));
                    Thread.sleep(20 * 1000);
                    System.out.println("40秒");
                    System.out.println(xx.get("1"));
                    System.out.println(xx.get("2"));
                    System.out.println(xx.get("3"));
                    System.out.println(xx.get("4"));
                    System.out.println(xx.get("5"));
                    Thread.sleep(20 * 1000);
                    System.out.println("60秒");
                    System.out.println(xx.get("1"));
                    System.out.println(xx.get("2"));
                    System.out.println(xx.get("3"));
                    System.out.println(xx.get("4"));
                    System.out.println(xx.get("5"));
                    Thread.sleep(20 * 1000);
                    System.out.println("80秒");
                    System.out.println(xx.get("1"));
                    System.out.println(xx.get("2"));
                    System.out.println(xx.get("3"));
                    System.out.println(xx.get("4"));
                    System.out.println(xx.get("5"));
                    Thread.sleep(20 * 1000);
                    System.out.println("100秒");
                    System.out.println(xx.get("1"));
                    System.out.println(xx.get("2"));
                    System.out.println(xx.get("3"));
                    System.out.println(xx.get("4"));
                    System.out.println(xx.get("5"));
                } catch (Exception e) {
                    System.out.println("error!");
                }
            }
        };
        t.start();
    }
    
    public String get(String key) throws ExecutionException {
        return localModelCache.get(key);
    }

    // 缓存模型
    private final LoadingCache<String, String> localModelCache = CacheBuilder.newBuilder().refreshAfterWrite(1, TimeUnit.MINUTES).build(new CacheLoader<String, String>() {

          @Override
          public String load(String key) throws Exception {
              return loadModelFeature(key);
          }

        @Override
        public ListenableFuture<String> reload(String key, String oldValue) throws Exception {
            System.out.println("reload");
            return reloadListenableFuture(key, oldValue);
        }
      });
    
    public ListenableFuture<String> reloadListenableFuture(String key, String oldValue) throws Exception {
        checkNotNull(key);
        checkNotNull(oldValue);
        return Futures.immediateFuture(oldValue + "reloadable");
      }
    
    private String loadModelFeature(String key) {
        System.out.println("===================" + "从本地装载" + key + "===================");
        return key + "1";
    }
    
}

 

分享到:
评论

相关推荐

    使用google guava 实现定时缓存功能

    本篇文章将详细探讨如何利用Guava库实现定时缓存功能,以提高应用的性能和效率。 首先,Guava的Cache组件是其核心特性之一,它提供了一种高效、自动化的缓存机制。定时缓存功能允许我们存储计算结果或从远程服务...

    guava-18.0(guava-18.0.jar和guava-18.0-sources.jar)

    3. **函数式编程**:Guava引入了Function、Predicate和Transformer等接口,支持函数式编程风格,便于代码的编写和测试。 4. **缓存机制**:Guava提供了本地缓存实现,可以帮助开发者轻松地在应用程序中构建高效的...

    guava-19.0 jar和sources

    另外,"guava-gwt-19.0-sources.jar"则是GWT优化版Guava的源代码,同样方便GWT开发者理解和调试Guava在Web环境下的行为。 总结来说,Guava-19.0的这两个jar文件以及对应的sources.jar,为Java开发者提供了强大的...

    guava-23.0.zip guava.jar guava

    在标题和描述中提到的"guava-23.0.zip"是一个包含Guava库版本23.0的压缩文件,而"guava.jar"则是Guava库的JAR文件,"guava"可能指的是Guava库本身或者与其相关的其他内容。 Guava库的核心特性包括: 1. **集合框架...

    guava(google的java集合包)

    7. ** Predicates 和 Functions**:Guava 提供了 Predicates 和 Functions 接口,可以方便地创建和组合函数和断言,这在编写测试或过滤数据时非常有用。 8. **检查类**:Preconditions、CheckState和CheckArgument...

    guava-21.0-rc2 、guava-21.0-rc2-javadoc 、guava-21.0-rc2-sources

    21.0-rc2表示这是一个候选版本,Release Candidate,意味着这是发布前的最后一个测试版本,通常在正式发布之前用于大规模测试和调试,以确保其稳定性和兼容性。 2. **guava-21.0-rc2-javadoc**: Javadoc是Java的...

    java集合分组(Guava)

    Guava是Google推出的一个强大的Java工具包,其中的Multiset、Multimap和GroupingBy等功能提供了高级的集合操作,特别是对于集合的分组功能,它提供了一种高效且灵活的方式。 首先,我们需要理解Guava中的`...

    guava-31.1-jre.jar

    guava

    guava多个版本jar包

    这个压缩包包含的是Guava的不同版本,分别是guava-2.6.2.jar、guava-18.0.jar、guava-19.0.jar和guava-23.0.jar。每个版本都有其特定的功能和改进,让我们逐一探讨这些版本的关键特性。 1. guava-2.6.2.jar:这是...

    guava-26.0-jre.zip

    3. **函数式编程**:Guava支持函数式编程风格,包括Function、Predicate、Transformer等接口,使得代码更简洁,更易于测试和维护。 4. **并发工具**:Guava提供了丰富的并发工具类,如 ListeningExecutorService、...

    Guava 工程项目包 有实例

    Guava 是一个由 Google 开发并维护的 Java 库,它提供了许多实用工具类和集合框架的增强功能,极大地丰富了 Java 平台的标准库。Guava 的目标是解决 Java 开发人员在日常工作中遇到的各种常见问题,提高开发效率和...

    google开源项目guava.jar包

    谷歌的Guava库是Java...这个经过测试的版本保证了其正确性和可用性,对于那些在网上寻找合适Guava包的开发者来说,无疑是一份宝贵的资源。在使用时,只需将此jar包添加到项目的类路径中,即可享受到Guava带来的便利。

    guava源文档

    guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档...

    guava-23.0-API文档-中文版.zip

    赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    不加密Google Guava视频教程.txt

    ├─Google Guava 第01讲-Joiner详细介绍以及和Java8Collector对比.wmv ├─Google Guava 第02讲-Guava Splitter详细讲解以及实战练习.wmv ├─Google Guava 第03讲-Preconditions&Objects;&assert;讲解.wmv ├─...

    guava-17.0-API文档-中文版.zip

    赠送jar包:guava-17.0.jar; 赠送原API文档:guava-17.0-javadoc.jar; 赠送源代码:guava-17.0-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-20.0-API文档-中文版.zip

    赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    guava-18.0-API文档-中文版.zip

    赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; ...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    Guava官方教程-中文

    Google Guava是一个比较有趣的框架,它提供了很多有趣的的功能, google Guava 给开发者提供了如下常用功能: 集合(collections) 缓存(caching) 原生的类型支持(primitives support) 并发类库(concurrency ...

    guava-11.0.2-API文档-中文版.zip

    赠送jar包:guava-11.0.2.jar; 赠送原API文档:guava-11.0.2-javadoc.jar; 赠送源代码:guava-11.0.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

Global site tag (gtag.js) - Google Analytics