Guava -- 集合类 和 Guava Caches 1....什么是 Guava Guava 是 google 推出的一个第三方 java 库,用来代替 jdk 的一些公共操作,给我印象特别深的就是 Collection 的扩展和本地缓存的扩展这两个方面了。...所以今天也就主要来讲讲 guava 的 collection 和 caches 两方面。 2....依赖 使用 guava 非常简单,可以直接通过 maven 导入依赖: com.google.guava <artifactId...Caches guava caches 用来当本地缓存个人认为是一个非常不错的选择。 1.
来源:https://mrbird.cc/Guava-RateLimiter.html Google Guava提供的RateLimiter使用的是令牌桶算法。...Guava RateLimiter允许某次请求获取超出剩余令牌数的令牌,但是下一次请求将为此付出代价,一直等到令牌亏空补上。
Guava是什么 进入新公司就会接触一些新的东东,Guava就是一个,Guava是Google的一个开源类库,丰富了JDK的API,而且使用起来很方便,本文介绍的是Guava collect包下的一些常用工具类...项目主页:https://github.com/google/guava Maven依赖: com.google.guava guava</...可以简化: List strList = new ArrayList(); Collections.addAll(strList, "1", "2", "3"); 使用Guava...Guava可以创建一个完全不可变的集合,如下代码: List strList = ImmutableList.of("1", "2", "3"); 本文只是对Guava Collect的管中窥豹...,也仅仅介绍了List部分,更多请移步:https://github.com/google/guava/wiki。
Guava使用 Guava Cache 是Google Fuava中的一个内存缓存模块,用于将数据缓存到JVM内存中。...提供了get、put封装操作,能够集成数据源 ;线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素,相当于对已有集合框架类的一个扩充;Guava Cache...提供了多种基本的缓存回收方式监控缓存加载/命中情况通常,Guava缓存适用于以下情况: 愿意花费一些内存来提高速度。...转为类型名称这个类型数量比较多,有可能发生变动但不频繁的情景 比如端面需要根据填报志愿的专业code获取专业名称如果返回实体不带Name,每个调一次查询服务,或者一次性拿出所有名称循环对比取显然不是很优雅就可以用Guava...来实现 /** 引入如下依赖 com.google.guava guava</artifactId
根据科普中国的定义,缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中...
简介 Predicate(断言,断定),是Guava中的一个基础接口,其内部只有一个方法boolean apply(T input),这个方法输入是一个泛型对象,输出是一个布尔值,非常简单,下面来看一下这个小东西能帮助我们做什么
Guava中Objects类提供了很多和Object类作用相同、效率更高的方法可供使用: 1.equal方法 使用Obejct的equals方法进行相等判断,例如: test.equals("test...Object的firstNonNull方法可以根据传入的两个参数来返回一个非Null的参数, view plain copy Objects.firstNonNull(null, "jack"); Guava
Guava地址:https://github.com/google/guava 第一次接触我是在16年春github上,当时在找单机查缓存方法,google guava当初取名是因为JAVA的类库不好用...guava在还没做分布式处理上,单机单整合上大行其道。...集合[Collections] Guava对JDK集合的扩展,这是Guava最成熟和为人所知的部分 2.1 不可变集合: 用不变的集合进行防御性编程和性能提升。...缓存[Caches] Guava Cache:本地缓存实现,支持多种缓存过期策略 4. 函数式风格[Functional idioms] Guava的函数式支持可以显著简化代码,但请谨慎使用它 5....反射[Reflection] Guava 的 Java 反射机制工具类 1.Guava EventBus探讨 在设计模式中, 有一种叫做发布/订阅模式, 即某事件被发布, 订阅该事件的角色将自动更新。
并发是一个难题,但是可以通过使用强力简单的抽象来显著的简化,为了简化问题,guava扩展了Future接口,即 ListenableFuture (可以监听的Future)。...它返回一个常规的Future,guava提供了ListeningExecutorService接口,它返回ListenableFuture。...private String sex; private Integer id; } } 相对的,如果你想从基于FutureTask的API转换过来,Guava...为了避免这种情况,所有的guava的Future处理方法(有些从jdk来),有 *Async版本来安全的解开这个嵌套。
Guava中Objects类提供了很多和Object类相似方法可供使用: 1.equal方法 使用Object的equals方法进行相等判断,例如: test.equals("test"); 如果test....firstNonNull方法 Object的firstNonNull方法可以根据传入的两个参数来返回一个非Null的参数, Objects.firstNonNull(null, "jack"); Guava
/** * Guava的不可变集合用法 * * 创建对象的不可变集合是一种很好的防御性编程技巧; * Guava为所有JDK标准集合类型和Guava集合类型都提供了简单易用的不可变版本; *
简介 Guava[ˈɡwɑːvə] 是 Google 开源的一个 Java 工具库。... com.google.guava guava 29.0-jre<...不变的;不可变的;不能变的 Guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现。...Guava提供了对JDK里标准集合类里的immutable版本的简单方便的实现,以及Guava自己的一些专门集合类的immutable实现。...注意:每个Guava immutable集合类的实现都拒绝null值。
如上示例,对于使用ForwardingMap的主体,可以不用考虑多代理的Map的具体实现。
Ordering类提供了一些链式的排序方法,相比JDK自带的排序方法更加简练、方便。 Ordering中有3种静态方法用于创建Ordering排序器: 根据上面...
1. Function接口,提供两个方法: apply方法: 可以自定义自己想实现的功能 1 @Nullable T apply(@Nullable F...
前言 Guava 包含我们在基于Java的项目中依赖的Google的几个核心库:集合,缓存,原语支持,并发库,通用批注,字符串处理,I / O等。...我们日常开发中 遇到最多的Exception 可能就是NullPointException 了,那么 guava 如何来优化这个问题呢? 避免使用null 粗心地使用null可能会导致各种错误。...(UseNullTest.java:51) at com.sf.guava.basic.UseNullTest.main(UseNullTest.java:24) :UseNullTest.main...true System.out.println(Objects.equal(str1, str2)); // 打印 true } 3.利用 比较链的方式 实现比较 package com.sf.guava.basic...other.zipCode, Ordering.natural().nullsLast()) .result(); } } 参数检查 package com.sf.guava.basic
刷新:主动刷新方法LoadingCache.referesh(K) 信息统计:CacheBuilder.recordStats() 开启Guava Cache的统计功能。
ReferenceEntry ReferenceEntry是guava-cache中实际进行存储的数据结构,其类图: 那么在初始状态下,每个Segment中有多少个ReferenceEntry呢?...ReHash guava cache采用了和ConcurrentHashMap同样的算法。...} return false; } finally { unlock(); postWriteCleanup(); } } 注意两点: guava...if (newCount > this.threshold) { // ensure capacity expand(); newCount = this.count + 1; } guava...高并发下数据写入与过期 总结 Guava cache其实是在ConcurrentHashMap的基础上加入了过期、权重、自动刷新等特性。
; // Copy the data from a URL to a file Resources.asByteSource(new URL("http://ifeve.com/google-guava-io
背景 上一篇文章中,我们详细介绍了 guava cache 的使用方法,尤其是在其中重点介绍了 guava cache 异步回种的用法,那么,性能优异的异步回种缓存究竟是如何实现的呢?...本文我们就来详细阅读 guava cache 的完整流程代码,抽丝剥茧,学习其中的思想与智慧。 guava cache 用法详解 2....基本思想 guava cache 异步回种基本思想: cache.get() 完整流程图: 3....guava cache 在上述情况下调用 lockedGetOrLoad() 方法获取数据,这个方法中,通过加 AQS 锁避免多个线程同时 load 获取数据,然后通过回调 load() 方法同步获取数据...总结 了解了 guava cache 异步回种的基本思想,也许你会觉得这一套解决方案的实现是如此简单,那么,我们知道,memcache、redis 都是只有提供了同步接口的,那么,你是否可以在此基础上实现一套异步回种方案呢
领取专属 10元无门槛券
手把手带您无忧上云