91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java高并發的三種實現案例講解

發布時間:2021-08-31 17:13:57 來源:億速云 閱讀:127 作者:chen 欄目:開發技術

本篇內容主要講解“Java高并發的三種實現案例講解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java高并發的三種實現案例講解”吧!

提到鎖,大家肯定想到的是sychronized關鍵字。是用它可以解決一切并發問題,但是,對于系統吞吐量要求更高的話,我們這提供幾個小技巧。幫助大家減小鎖顆粒度,提高并發能力。

初級技巧-樂觀鎖

樂觀鎖使用的場景是,讀不會沖突,寫會沖突。同時讀的頻率遠大于寫。

 悲觀鎖的實現

Java高并發的三種實現案例講解

悲觀的認為所有代碼執行都會有并發問題,所以將所有代碼塊都用sychronized鎖住

樂觀鎖的實現

Java高并發的三種實現案例講解

樂觀的認為在讀的時候不會產生沖突為題,在寫時添加鎖。所以解決的應用場景是讀遠大于寫時的場景。

中級技巧-String.intern()

樂觀鎖不能很好的解決大量的寫沖突的問題,但是很多場景下,鎖只是針對某個用戶或者某個訂單。 比如一個用戶先創建session,才能進行后面的操作,但是由于網絡的問題,創建session的請求和后續請求幾乎同時到達,而并行線程可能會先處理后面的請求。一般情況需要對用戶sessionMap加鎖,比如上面的樂觀鎖。在這樣的場景下,可以將鎖限定在用戶本身上,即原來的

Java高并發的三種實現案例講解

這個比較類似行鎖和數據庫表鎖的概念。顯然行鎖的并發能力比表鎖的高很多。

實用String.intern();是這種方式的具體實現。類String維護了一個字符串池。當調用intern方法時,如果池已經包含一個等于此String對象的字符串(該對象由equals(Object)方法確定),則返回池中的字符串。可見,當String 相同時,總返回同一個對象,因此就實現了對同一用戶加鎖。由于所的顆粒度局限于具體用戶,使得系統獲得最大程度的并發。

Java高并發的三種實現案例講解

CopyOnWriteMap?

既然說到了“類似于數據庫中的行鎖的概念”,就不得不提一下MVCC,Java中CopyOnWrite類實現了MVCC。Copy On Write是這樣一種機制。當我們讀取共享數據的時候,直接讀取,不需要同步。當我們修改數據的時候,我們就把當前數據Copy一份副本,然后在這個副本 上進行修改,完成之后,再用修改后的副本,替換掉原來的數據。這種方法就叫做Copy On Write。

但是,,,JDK并沒有提供CopyOnWriteMap,為什么?下面有個很好的回答,那就是已經有了ConcurrentHashMap,為什么還需要CopyOnWriteMap?

高級技巧 - 類ConcurrentHashMap

String.inter()的缺陷是類 String 維護一個字符串池是放在JVM perm區的,如果用戶數特別多,導致放入字符串池的String不可控,有可能導致OOM錯誤或者過多的Full GC。怎么樣能控制鎖的個數,同時減小粒度鎖呢?直接使用Java ConcurrentHashMap?或者你想加入自己更精細的控制?那么可以借鑒ConcurrentHashMap的方式,將需要加鎖的對象分為多個bucket,每個bucket加一個鎖,偽代碼如下:

Java高并發的三種實現案例講解

到此,相信大家對“Java高并發的三種實現案例講解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武汉市| 城步| 会昌县| 罗甸县| 永平县| 毕节市| 长顺县| 林西县| 大姚县| 福建省| 蕉岭县| 堆龙德庆县| 家居| 泸溪县| 大荔县| 霍山县| 珠海市| 凭祥市| 桑植县| 舟曲县| 威宁| 大名县| 霍州市| 崇文区| 东乌| 忻城县| 克山县| 景宁| 贵港市| 龙南县| 云林县| 重庆市| 瑞金市| 合作市| 顺昌县| 柯坪县| 祁门县| 隆安县| 承德市| 宿松县| 淮滨县|