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"; } }
相关推荐
本篇文章将详细探讨如何利用Guava库实现定时缓存功能,以提高应用的性能和效率。 首先,Guava的Cache组件是其核心特性之一,它提供了一种高效、自动化的缓存机制。定时缓存功能允许我们存储计算结果或从远程服务...
3. **函数式编程**:Guava引入了Function、Predicate和Transformer等接口,支持函数式编程风格,便于代码的编写和测试。 4. **缓存机制**:Guava提供了本地缓存实现,可以帮助开发者轻松地在应用程序中构建高效的...
另外,"guava-gwt-19.0-sources.jar"则是GWT优化版Guava的源代码,同样方便GWT开发者理解和调试Guava在Web环境下的行为。 总结来说,Guava-19.0的这两个jar文件以及对应的sources.jar,为Java开发者提供了强大的...
在标题和描述中提到的"guava-23.0.zip"是一个包含Guava库版本23.0的压缩文件,而"guava.jar"则是Guava库的JAR文件,"guava"可能指的是Guava库本身或者与其相关的其他内容。 Guava库的核心特性包括: 1. **集合框架...
7. ** Predicates 和 Functions**:Guava 提供了 Predicates 和 Functions 接口,可以方便地创建和组合函数和断言,这在编写测试或过滤数据时非常有用。 8. **检查类**:Preconditions、CheckState和CheckArgument...
21.0-rc2表示这是一个候选版本,Release Candidate,意味着这是发布前的最后一个测试版本,通常在正式发布之前用于大规模测试和调试,以确保其稳定性和兼容性。 2. **guava-21.0-rc2-javadoc**: Javadoc是Java的...
Guava是Google推出的一个强大的Java工具包,其中的Multiset、Multimap和GroupingBy等功能提供了高级的集合操作,特别是对于集合的分组功能,它提供了一种高效且灵活的方式。 首先,我们需要理解Guava中的`...
guava
这个压缩包包含的是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 是一个由 Google 开发并维护的 Java 库,它提供了许多实用工具类和集合框架的增强功能,极大地丰富了 Java 平台的标准库。Guava 的目标是解决 Java 开发人员在日常工作中遇到的各种常见问题,提高开发效率和...
谷歌的Guava库是Java...这个经过测试的版本保证了其正确性和可用性,对于那些在网上寻找合适Guava包的开发者来说,无疑是一份宝贵的资源。在使用时,只需将此jar包添加到项目的类路径中,即可享受到Guava带来的便利。
guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档...
赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
├─Google Guava 第01讲-Joiner详细介绍以及和Java8Collector对比.wmv ├─Google Guava 第02讲-Guava Splitter详细讲解以及实战练习.wmv ├─Google Guava 第03讲-Preconditions&Objects;&assert;讲解.wmv ├─...
赠送jar包:guava-17.0.jar; 赠送原API文档:guava-17.0-javadoc.jar; 赠送源代码:guava-17.0-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; ...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
3. **函数式编程**:Guava支持函数式编程风格,包括Function、Predicate、Transformer等接口,使得代码更简洁,更易于测试和维护。 4. **并发工具**:Guava提供了丰富的并发工具类,如 ListeningExecutorService、...
Google Guava是一个比较有趣的框架,它提供了很多有趣的的功能, google Guava 给开发者提供了如下常用功能: 集合(collections) 缓存(caching) 原生的类型支持(primitives support) 并发类库(concurrency ...
赠送jar包:guava-11.0.2.jar; 赠送原API文档:guava-11.0.2-javadoc.jar; 赠送源代码:guava-11.0.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。