例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存。 Guava Cache与ConcurrentMap很相似,但也不完全一样。...默认情况下,对每个不在缓存中的键,getAll方法会单独调用CacheLoader.load来加载缓存项。...测试定时回收 对定时回收进行测试时,不一定非得花费两秒钟去测试两秒的过期。...但许多缓存只在单线程中使用,它们的用户仍然必须捕捉不可能抛出的InterruptedException异常。...另一个意义上说,Guava Cache不支持中断,这使得LoadingCache成了一个有漏洞的抽象:当加载过程被中断了,就当作其他异常一样处理,这在大多数情况下是可以的;但如果多个线程在等待加载同一个缓存项
作者:zfz_linux_boy 链接:http://blog.51cto.com/zhangfengzhe/1912897 目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava...正如标题所言,学习使用Google Guava可以让你快乐编程,写出优雅的JAVA代码!...其实除了Joiner/Splitter外,guava还提供了字符串匹配器:CharMatcher ? CharMatcher,将字符的匹配和处理解耦,并提供丰富的方法供你使用!...对基本类型进行支持 guava对JDK提供的原生类型操作进行了扩展,使得功能更加强大! ?...当然,在不使用guava的情况下,我们是怎么避免上面的问题的呢? ? 上面揭示了一个概念:Defensive Copies,保护性拷贝。
Guava地址:https://github.com/google/guava 第一次接触我是在16年春github上,当时在找单机查缓存方法,google guava当初取名是因为JAVA的类库不好用...,所以谷歌工程师自己开发一套,想着google出品必属精品理念,我们一起来了解一下。...() 1.4 排序: Guava强大的”流畅风格比较器” 1.5 Throwables:简化了异常和错误的传播与检查 2....集合[Collections] Guava对JDK集合的扩展,这是Guava最成熟和为人所知的部分 2.1 不可变集合: 用不变的集合进行防御性编程和性能提升。...缓存[Caches] Guava Cache:本地缓存实现,支持多种缓存过期策略 4. 函数式风格[Functional idioms] Guava的函数式支持可以显著简化代码,但请谨慎使用它 5.
以下是使用Guava RateLimiter的最佳实践: 1 创建RateLimiter对象的最佳实践 在创建RateLimiter对象时,建议使用静态工厂方法来创建,因为它提供了更清晰的API,并且允许您使用不同的参数值来创建...如果在等待过程中发生中断,则会抛出 InterruptedException异常。 double acquire(int permits) 该方法用于获取指定数量的许可证,并返回等待的时间。...如果在等待过程中发生中断,则会抛出 InterruptedException 异常。...方法的最佳实践 如果您使用的是非阻塞的逻辑,并且需要根据RateLimiter的许可证可用性做出决策,则可以使用tryAcquire()方法来尝试获取许可证。...Guava RateLimiter 的最佳实践。
结论:当作为参数的event之间有继承关系时,使用eventBus发送消息,eventt的父类listener也会对此消息进行处理。...在默认情况下,EventBus不会对异常信息进行处理,异常信息也不会终止EventBus的运行,只会简单的打印出异常堆栈信息。...,异常信息也不会终止EventBus的运行,只会简单的打印出异常堆栈信息。...//在EventBus构造函数中传入SubscriberExceptionHandler来对异常信息进行处理 //下面是通过lambda表达式来实现SubscriberExceptionHandler...可以在EventBus构造函数中传入一个SubscriberExceptionHandler对象来对异常信息进行处理。
高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力 Guava工程包含了若干被Google的 Java项目广泛依赖...方法中的==操作集合的方法都声明过期==,并且抛出异常。 没用guava之前是需要声明并且加各种包裹集合才能实现这个功能。...//自定义过滤条件 使用自定义回调方法对Map的每个Value进行操作 ImmutableMap m = ImmutableMap.of("begin"...11.guava缓存 guava的缓存设计的比较巧妙,可以很精巧的使用。...---- 以上只是guava使用的一小部分,guava是个大的工具类,第一版guava是2010年发布的,每一版的更新和迭代都是一种创新。 jdk的升级很多都是借鉴guava里面的思想来进行的。
guava的优点: 高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力 Guava工程包含了若干被Google...使用 引入gradle依赖(引入Jar包) compile 'com.google.guava:guava:26.0-jre' 1.集合的创建 // 普通Collection的创建 List<String...("Java"))); System.out.println(fitered); // [Guava, Java] //自定义过滤条件 使用自定义回调方法对Map的每个Value进行操作 ImmutableMap...缓存 guava的缓存设计的比较巧妙,可以很精巧的使用。.../google/guava/wiki 参考: Google guava工具类的介绍和使用 Guava工具类学习
Guava引入了很多JDK没有的、但我们发现明显有用的新集合类型。...Guava提供了一个新集合类型 Multiset,它可以多次添加相等的元素。...很好使用例如: @Test public void test10() { Multiset multiset1 = HashMultiset.create(); multiset1...multiset1);// multiset2移除所有"a",虽然multiset1只有2个"a" multiset2.isEmpty(); // returns true } 下面我用测试用例说明一下guava...intersection包含"two", "three", "seven" ImmutableSet immutableCopy = intersection.immutableCopy();// 可以使用交集
,那么需要限制应用; 可以使用池化技术来限制总资源数:连接池、线程池。...比如分配给每个应用的数据库连接是100 那么本应用最多可以使用100个资源,超出了可以等待或者抛异常。 ?...Guava简介 Guava是一个 Google开发的 基于java的类库集合的扩展项目,包括 collections, caching, primitives support,concurrency libraries...Guava对比其他限流方案的特点 ·流量可控:控制令牌产生的速率 ·限流平滑:线程池/Hystrix等限流方案,一旦造成资源耗尽(线程池打满,信号量用完),很可能造成一段时间内都拒绝请求,依赖于对资源的释放后...guava源码地址:https://github.com/google/guava demo源码地址:https://github.com/online-demo/yunxi-guava.git
源码: private static Cache<String, String> cacheFormCallable = null; public stati...
Google Guava 集合工具类 Guava中的集合方法扩展 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法。...immutable对象有以下的优点: * 1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 * 2.线程安全的:immutable对象在多线程下安全,没有竞态条件...所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis) * 4.可以被使用为一个常量,并且期望在未来也是保持不变的 * Guava提供了对JDK里标准集合类里的immutable版本的简单方便的实现...当你不希望修改一个集合类,或者想做一个常量集合类的时候,使用immutable集合类就是一个最佳的编程实践 * 注意:每个Guava immutable集合类的实现都拒绝null值。...我们做过对Google内部代码的全面的调查,并且发现只有5%的情况下集合类允许null值,而95%的情况下都拒绝null值。
Guava使用 Guava Cache 是Google Fuava中的一个内存缓存模块,用于将数据缓存到JVM内存中。...提供了get、put封装操作,能够集成数据源 ;线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素,相当于对已有集合框架类的一个扩充;Guava Cache...提供了多种基本的缓存回收方式监控缓存加载/命中情况通常,Guava缓存适用于以下情况: 愿意花费一些内存来提高速度。...使用场景有时会多次查询key。...来实现 /** 引入如下依赖 com.google.guava guava</artifactId
概述 在本教程中,我们将展示如何使用 Google Guava 的 Table 接口及其多个实现。...Guava 的 Table 是一种集合,表示包含行、列和相关单元格值的表结构,行和列充当有序的键对。 2. Google Guava的 Table 让我们看看如何使用 Table 类。 2.1....Maven依赖 首先,在 pom.xml 中添加 Google Guava 库的依赖项: com.google.guava <artifactId...创建 您可以以多种方式创建 Table的实例: 使用类 HashBasedTable中的 create方法,它在内部使用 LinkedHashMap: Table<String, String, Integer...使用 让我们从一个简单的示例开始,展示如何使用 Table。 4.1.
记录一下Guava中常用的集合方法 /** * Author: momo * Date: 2018/6/7 * Description: */ public class ListTest {
谷歌Guava缓存 Guava介绍 Guava是Google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中。实际项目开发中经常将一些公共或者常用的数据缓存起来方便快速访问。 ?...Guava Cache是单个应用运行时的本地缓存。它不把数据存放到文件或外部服务器。如果不符合需求,可以选择Memcached、Redis等工具。 小案例 pom.xml添加guava依赖 1.1.0 com.google.guava...; import java.util.concurrent.TimeUnit; /** * @author simon * https://github.com/google/guava */.../设置缓存容器的初始容量为5 .initialCapacity(5) //设置缓存最大容量为100,超过100之后就会按照LRU最近虽少使用算法来移除缓存项
前面刚说到Guava Cache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。...Guava Cache虽然有这么多的功能,但是本质上还是对LRU的封装,如果有更优良的算法,并且也能提供这么多功能,相比之下就相形见绌了。...Caffeine.weakKeys():使用弱引用存储key。如果没有其他地方对该key有强引用,那么该缓存就会被垃圾回收器回收。...Caffeine.weakValues() :使用弱引用存储value。如果没有其他地方对该value有强引用,那么该缓存就会被垃圾回收器回收。...使用注解来对 cache 增删改查 我们可以使用spring提供的 @Cacheable、@CachePut、@CacheEvict等注解来方便的使用caffeine缓存。
我正是在这样的背景下应运而生的,我简单易用,对我大哥是一个非常好的补充,可以说,只要你有使用我哥作为开发语言的项目,几乎都能看到我的身影。...我由 Google 公司开源,目前在 GitHub 上已经有 39.9k 的铁粉了,由此可以证明我的受欢迎程度。 ?...这么说吧,学好如何使用我,能让你在编程中变得更快乐,写出更优雅的代码! 02、引入 Guava 如果你要在 Maven 项目使用我的话,需要先在 pom.xml 文件中引入我的依赖。... com.google.guava guava ...在我们日常的工作中,字符串的使用非常频繁,熟练的对其操作可以极大的提升我们的工作效率。 我提供了连接器——Joiner,可以用分隔符把字符串序列连接起来。
目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!学习使用Google Guava可以让你快乐编程,写出优雅的JAVA代码!...更加重要的是,guava提供的Joiner/Splitter是经过充分测试,它的稳定性和效率要比apache高出不少,这个你可以自行测试下~发现没有我们想对String做什么操作,就是生成自己定制化的Joiner...CharMatcher CharMatcher,将字符的匹配和处理解耦,并提供丰富的方法供你使用! 对基本类型进行支持 guava对JDK提供的原生类型操作进行了扩展,使得功能更加强大! ?...当然,在不使用guava的情况下,我们是怎么避免上面的问题的呢? ? defensive copies 上面揭示了一个概念:Defensive Copies,保护性拷贝。...异步回调 我们可以通过guava对JDK提供的线程池进行装饰,让其具有异步回调监听功能,然后在设置监听器即可! Summary 到这里,这篇文章也只介绍了guava的冰山一角,其实还有很多内容: ?
guava中Range的使用方法(com.google.common.collect.Range) 大家好,我是架构君,一个会写代码吟诗的架构师。...今天说一说guava中Range的使用方法(com.google.common.collect.Range),希望能够帮助大家进步!!!...1.构造Range实例必须使用Range中的静态方法,因为Range的构造方法被设置为private,当a > b使,或者当a == b且为(a,b)时会抛出IllegalArgumentException
领取专属 10元无门槛券
手把手带您无忧上云