亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

淺談Java非阻塞同步機制和CAS

瀏覽:82日期:2022-08-11 14:06:11
目錄什么是非阻塞同步悲觀鎖和樂觀鎖CAS什么是非阻塞同步

非阻塞同步的意思是多個線程在競爭相同的數據時候不會發生阻塞,從而能夠在更加細粒度的維度上進行協調,從而極大的減少線程調度的開銷,從而提升效率。非阻塞算法不存在鎖的機制也就不存在死鎖的問題。

在基于鎖的算法中,如果一個線程持有了鎖,那么其他的線程將無法進行下去。使用鎖雖然可以保證對資源的一致性訪問,但是在掛起和恢復線程的執行過程中存在非常大的開銷,如果鎖上面存在著大量的競爭,那么有可能調度開銷比實際工作開銷還要高。

悲觀鎖和樂觀鎖

我們知道獨占鎖是一個悲觀鎖,悲觀鎖的意思就是假設最壞的情況,如果你不鎖定該資源,那么就有其他的線程會修改該資源。悲觀鎖雖然可以保證任務的順利執行,但是效率不高。

樂觀鎖就是假設其他的線程不會更改要處理的資源,但是我們在更新資源的時候需要判斷該資源是否被別的線程所更改。如果被更改那么更新失敗,我們可以重試,如果沒有被更改,那么更新成功。

使用樂觀鎖的前提是假設大多數時間系統對資源的更新是不會產生沖突的。

樂觀鎖的原子性比較和更新操作,一般都是由底層的硬件支持的。

CAS

大多數的處理器都實現了一個CAS指令(compare and swap),通常來說一個CAS接收三個參數,數據的現值V,進行比較的值A,準備寫入的值B。只有當V和A相等的時候,才會寫入B。無論是否寫入成功,都會返回V。翻譯過來就是“我認為V現在的值是A,如果是那么將V的值更新為B,否則不修改V的值,并告訴我現在V的值是多少?!?/p>

這就是CAS的含義,JDK中的并發類是通過使用Unsafe類來使用CAS的,我們可以自己構建一個并發類,如下所示:

public class CasCounter { private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long valueOffset; private volatile int value; static {try { valueOffset = unsafe.objectFieldOffset (CasCounter.class.getDeclaredField('value'));} catch (Exception ex) { throw new Error(ex); } } public CasCounter(int initialValue) {value = initialValue; } public CasCounter() { } public final int get() {return value; } public final void set(int newValue) {value = newValue; } public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update); }}

上面的例子中,我們定義了一個原子操作compareAndSet, 它內部調用了unsafe的compareAndSwapInt方法。

看起來上面的CAS使用比直接使用鎖復雜,但實際上在JVM中實現鎖定時需要遍歷JVM中一條非常復雜的代碼路徑,并可能導致操作系統級的鎖定,線程掛機和上下文切換等操作。在最好的情況下,鎖定需要執行一次CAS命令。

CAS的主要缺點就是需要調用者自己來處理競爭問題(重試,回退,放棄),而在鎖中可以自動處理這些問題。

前面的文章我們也講到了原子變量,原子變量的底層就是使用CAS。

以上就是淺談Java非阻塞同步機制和CAS的詳細內容,更多關于Java非阻塞同步機制和CAS的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 一级欧美一级日韩片 | 综合色吧 | 日本中文字幕乱码免费 | 成 人免费va视频 | 日韩一级视频 | 一级国产视频 | a一级视频 | 欧美日韩一区二区三区毛片 | 国产各种盗摄视频 | 国产成人在线视频免费观看 | 亚洲精品一区二区三区婷婷 | 色悠久久久 | 国产噜噜在线视频观看 | 激情爱爱的免费视频 | 国产精品公开免费视频 | 污网站免费 | 黄色录像一级 | 国产亚洲美女精品久久久久狼 | 成人精品区 | 日本aaaa特级毛片 | 114级毛片免费观看 123456成年免费视频 | 国产精品yjizz视频网一二区 | 国产成人系列 | 国产免费高清视频在线观看不卡 | 久久厕所精品国产精品亚洲 | 亚洲ss| 亚洲国产精品高清在线一区 | 性感美女在线喷水 | 色视频一区二区三区 | 日韩欧美在线综合网 | 欧美特黄aaaaaa | 天天综合网天天综合色 | 岛国一级毛片 | 91福利国产在线观看 | 黄色资源在线观看 | 日韩欧美精品综合一区二区三区 | 99久久久国产精品免费播放器 | 日韩免费高清视频网站 | 免费成人在线网站 | 亚洲精品九色在线网站 | 国产亚洲精品欧美一区 |