日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

q7goodies事例_Java 8 Friday Goodies:轻松派本地缓存

發(fā)布時間:2023/12/3 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 q7goodies事例_Java 8 Friday Goodies:轻松派本地缓存 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

q7goodies事例

在Data Geekery ,我們喜歡Java。 而且,由于我們真的很喜歡jOOQ的流暢的API和查詢DSL ,我們對Java 8將為我們的生態(tài)系統(tǒng)帶來什么感到非常興奮。 我們已經(jīng)寫了一些關(guān)于Java 8好東西的博客 ,現(xiàn)在我們覺得是時候開始一個新的博客系列了,……

Java 8星期五

每個星期五,我們都會向您展示一些不錯的教程風(fēng)格的Java 8新功能,這些功能利用了lambda表達式,擴展方法和其他出色的功能。 您可以在GitHub上找到源代碼 。

Java 8 Goodie:輕松派本地緩存

現(xiàn)在,準(zhǔn)備好進行本系列迄今為止最出色的啟示之一。 我們將向您展示使用良好的舊ConcurrentHashMap和lambda表達式實現(xiàn)本地緩存的簡便方法。 因為, Map現(xiàn)在有了一種新方法,可以在缺少鍵的情況下自動計算新值 。 非常適合緩存。 讓我們深入研究代碼:

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)這樣的小數(shù)字,上面的算法也會打印出大量的行,因為我們將以指數(shù)方式重復(fù)相同的計算:

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

我們要做的是建立一個先前計算的斐波那契數(shù)的緩存。 最簡單的技術(shù)是記憶高速緩存中的所有值 。 這是我們建立緩存的方法:

static Map<Integer, Integer> cache = new ConcurrentHashMap<>();

做完了! 如前所述,僅當(dāng)我們尚無給定鍵的值時,才使用新添加的Map.computeIfAbsent()方法從source函數(shù)計算新值。 正在緩存! 而且由于保證了此方法可以原子執(zhí)行,并且由于我們使用的是ConcurrentHashMap ,因此該緩存甚至是線程安全的,而無需在任何地方手動應(yīng)用synchronized 。 除了計算斐波納契數(shù)之外,它還可以重用于其他東西。 但首先讓我們將此緩存應(yīng)用于fibonacci()函數(shù)。

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);}); }

以上程序?qū)⒋蛴?

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

我們將如何在Java 7中做到這一點?

好問題。 有很多代碼。 我們可能會使用雙重檢查鎖定來編寫這樣的內(nèi)容:

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 。

結(jié)論

Lambda僅是Java 8的一部分。這是重要的一部分,但不要忘了添加到庫中的所有新功能,這些新功能現(xiàn)在可以與Lambda一起使用!

這真是令人興奮,并且…

我們無需使用新的庫就可以大大改善我們的代碼庫。 以上所有內(nèi)容只能與JDK的庫一起運行。

在本博客系列的下周,我們將研究Java 8如何在現(xiàn)有和新的并發(fā)API上進行改進,敬請期待!

有關(guān)Java 8的更多信息

同時,請查看Eugen Paraschiv出色的Java 8資源頁面

參考: Java 8 Friday Goodies: JAVA,SQL和JOOQ博客上的JCG合作伙伴 Lukas Eder提供的“ 容易餅式本地緩存” 。

翻譯自: https://www.javacodegeeks.com/2014/03/java-8-friday-goodies-easy-as-pie-local-caching.html

q7goodies事例

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的q7goodies事例_Java 8 Friday Goodies:轻松派本地缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。