个人网站注册平台要多少钱,网站建设是一个什么的过程,怎么将html代码放到wordpress,画家个人网站建设这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存。因为Map有一个新的方法可以在key为Null的时候自动计算一个新的value值。非常完美的实现cache。来看下代码#xff1a; public static void main(String[] args) {for (int i 0; i 10; i)Syst…这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存。因为Map有一个新的方法可以在key为Null的时候自动计算一个新的value值。非常完美的实现cache。来看下代码 public static void main(String[] args) {for (int i 0; i 10; i)System.out.println(f( i ) fibonacci(i));
}static int fibonacci(int i) {if (i 0)return i;if (i 1)return 1;System.out.println(Calculating f( i ));return fibonacci(i - 2) fibonacci(i - 1);
} 当然这种方式很傻瓜了。即使对于一个非常小的数例如fibonacci(5)上面的代码打印出很多行而且都是在进行重复计算输出如下只截取一部分 Calculating f(6)
Calculating f(4)
Calculating f(2)
Calculating f(3)
Calculating f(2)
Calculating f(5)
Calculating f(3)
Calculating f(2)
Calculating f(4)
Calculating f(2)
Calculating f(3)
Calculating f(2)
f(6) 8 我们想要做的就是创建一个缓存用来计算斐波那契数列。最直接的方法就是在缓存中存放所有的value值。cache的创建如下 static MapInteger, Integer cache new ConcurrentHashMap(); 译者注这种写法在Java8中是允许的 声明cache之后通过Map.computeIfAbsent() 方法可以在key所对应的value值不存在的情况下计算一个新的value值。超高速缓存Caching由于这个方法是自动执行的而且我们使用了 ConcurrentHashMap对象这个缓存是线程安全的不需要手动的去写同步方法。另外它不仅仅可以处理斐波那契额数列在其他地方也可以被重复使用。 不过现在我们看看如何在fibonacci()方法中使用缓存。 static int fibonacci(int i) {if (i 0)return i;if (i 1)return 1;return cache.computeIfAbsent(i, (key) -fibonacci(i - 2) fibonacci(i - 1));
} 瞧瞧。不能比这个再简单了吧。想要证明吗好吧每当我们计算一个新值的时候都在控制台输出信息 static int fibonacci(int i) {if (i 0)return i;if (i 1)return 1;return cache.computeIfAbsent(i, (key) - {System.out.println(Slow calculation of key);return fibonacci(i - 2) fibonacci(i - 1);});
} 程序输出如下 f(0) 0
f(1) 1
Slow calculation of 2
f(2) 1
Slow calculation of 3
f(3) 2
Slow calculation of 4
f(4) 3
Slow calculation of 5
f(5) 5
Slow calculation of 6
f(6) 8
Slow calculation of 7
f(7) 13
Slow calculation of 8
f(8) 21
Slow calculation of 9
f(9) 34 在Java7下又如何实现呢 这样代码就会多一些我们可以使用double-checked locking来实现 static int fibonacciJava7(int i) {if (i 0)return i;if (i 1)return 1;Integer result cache.get(i);if (result null) {synchronized (cache) {result cache.get(i);if (result null) {System.out.println(Slow calculation of i);result fibonacci(i - 2) fibonacci(i - 1);cache.put(i, result);}}}return result;
} 注你实际的解决方案很可能会用到Guava Caches。 总结Lambdas 表达式是Java8中非常重要的一部分。我们不要忘记添加到库中的所有的新特性。 原文链接 Jooq 翻译 ImportNew.com - 宋 涛译文链接 http://www.importnew.com/10227.html -----------------------分割线-------------------------------------------------- 目前Oracle官方还未放出JDK1.8 的 Documentation ,查看API可以访问URL:http://download.java.net/jdk8/docs/api/转载于:https://www.cnblogs.com/GYoungBean/p/3604412.html