Java8简单的本地缓存实现
2016-05-09 15:35
561 查看
原文出处:lukaseder
当然,这种方式很傻瓜。即使对于一个非常小的数,例如fibonacci(5),上面的代码也会打印出很多行,而且都是在进行重复计算,输出如下(只截取一部分):
我们想要做的就是创建一个缓存,用来计算斐波那契数列。最直接的方法就是在缓存中存放所有的value值。cache的创建如下:
(译者注:这种写法在java8中是允许的)
声明cache之后,通过Map.computeIfAbsent() 方法,可以在key所对应的value值不存在的情况下,计算一个新的value值。超高速缓存(Caching)!由于这个方法是自动执行的,而且我们使用了 ConcurrentHashMap对象,这个缓存是线程安全的,不需要手动的去写同步方法。另外,它不仅仅可以处理斐波那契额数列,在其他地方也可以被重复使用。
不过现在,我们看看如何在fibonacci()方法中使用缓存。
瞧瞧。不能比这个再简单了吧。想要证明吗?好吧,我们在每次计算一个新值的时候,加上些日志:
程序输出如下:
注:你实际的解决方案很可能会用到Guava Caches。
总结:Lambdas 表达式是Java8中非常重要的一部分。同时我们不要忘记那些新添加到库中的,可以和Lambdas 配合使用的特性。
Java8简单的本地缓存实现
这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存。因为Map有一个新的方法,在key为Null的时候自动计算一个新的value值。非常适合实现cache。来看下代码:声明cache之后,通过Map.computeIfAbsent() 方法,可以在key所对应的value值不存在的情况下,计算一个新的value值。超高速缓存(Caching)!由于这个方法是自动执行的,而且我们使用了 ConcurrentHashMap对象,这个缓存是线程安全的,不需要手动的去写同步方法。另外,它不仅仅可以处理斐波那契额数列,在其他地方也可以被重复使用。
不过现在,我们看看如何在fibonacci()方法中使用缓存。
在Java7下又如何实现呢?
这样代码就会多一些,我们可以使用double-checked locking来实现:总结:Lambdas 表达式是Java8中非常重要的一部分。同时我们不要忘记那些新添加到库中的,可以和Lambdas 配合使用的特性。
相关文章推荐
- Spring学习之切入点表达式
- Java集合
- 类加载机制(类加载过程和类加载器)
- struts2(十)之JSON基础
- Java JTable与滚动条JScollpane结合使用不能出现很想滚动条的解决办法
- Java开发环境搭建全过程(附带视频)
- java代码工具--Date格式化
- spring常问面试题
- SVN使用教程之-分支/标记 合并 subeclipse
- 【JavaService】使用Java编写部署windows服务
- Java 标准I/O重定向
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- java工程师应掌握的
- Java Observer 观察者模式 程序 总结
- Java面向对象课程小结
- 5.9 JAVA
- javah,eclipse配置
- "XXX cannot be resolved to a type "eclipse报错及解决说明
- Shiro学习总结(10)——Spring集成Shiro
- Java文件编码及读写