亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

java并發(fā)編程學(xué)習(xí)之cas(一)

ConardLi / 1260人閱讀

摘要:線程把的值放在中。線程執(zhí)行,得到的為。,,獨(dú)占鎖,會(huì)導(dǎo)致其他所有需要鎖的線程掛起,等待持有鎖的線程釋放鎖。可見性,不保證原子性。樂觀鎖,不適用鎖的情況下實(shí)現(xiàn)多線程的變量同步。性能問題在并發(fā)量較高的情況下,如果一直不成功,會(huì)一直增加的開銷。

cas原理

cas全稱Compare and swap,比較和交換的意思。原子操作,需要硬件的支持。
三個(gè)基本操作數(shù):內(nèi)存地址V,舊的預(yù)期值A(chǔ),要修改的新值B。
舉個(gè)線程A想執(zhí)行相加的例子。

內(nèi)存地址V有個(gè)值是1。

線程A把V的值放在A中。

線程A執(zhí)行V+2,得到的3為B。

把A和V的值比較,如果不一樣,重新執(zhí)行2的步驟。

如果一樣,把V的值替換為B。

synchronized,volatile,cas

synchronized:獨(dú)占鎖,會(huì)導(dǎo)致其他所有需要鎖的線程掛起,等待持有鎖的線程釋放鎖。

volatile:可見性,不保證原子性。

cas:樂觀鎖,不適用鎖的情況下實(shí)現(xiàn)多線程的變量同步。

缺點(diǎn)

ABA問題:在上面例子中,如果V的值是1,被B線程變成2,再被A線程變成1,那么對(duì)于A線程來說,還是當(dāng)做沒有變化。解決的辦法就是加版本號(hào)。

性能問題:在并發(fā)量較高的情況下,如果一直不成功,會(huì)一直增加CPU的開銷。

只能保證一個(gè)共享變量的原子操作

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75351.html

相關(guān)文章

  • java并發(fā)編程學(xué)習(xí)之cas-AtomicStampedReference(三)

    摘要:作用通過版本號(hào)解決的問題。示例當(dāng)前值,預(yù)設(shè)當(dāng)前版本號(hào)結(jié)果當(dāng)前值,預(yù)設(shè)當(dāng)前版本號(hào)結(jié)果當(dāng)前值當(dāng)前版本號(hào)運(yùn)行結(jié)果如下這里用休眠,讓線程和線程一次執(zhí)行,通過結(jié)果可以看出來,線程執(zhí)行成功,而線程執(zhí)行失敗。 作用 通過版本號(hào)解決ABA的問題。 示例 public class AtomicStampedReferenceDemo { static AtomicStampedReference...

    DevTalking 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之cas-AtomicInteger(二)

    摘要:示例運(yùn)行結(jié)果如下在多線程無鎖的情況下,總是小于等于,而因?yàn)樵有缘姆椒偸堑扔凇? 示例 public class AtomicDemo { static int num1 = 0; static AtomicInteger num2 = new AtomicInteger(0); static class Thread1 extends Thread { ...

    warmcheng 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之cas-AtomicStampedReference(三)

    摘要:作用通過版本號(hào)解決的問題。示例當(dāng)前值,預(yù)設(shè)當(dāng)前版本號(hào)結(jié)果當(dāng)前值,預(yù)設(shè)當(dāng)前版本號(hào)結(jié)果當(dāng)前值當(dāng)前版本號(hào)運(yùn)行結(jié)果如下這里用休眠,讓線程和線程一次執(zhí)行,通過結(jié)果可以看出來,線程執(zhí)行成功,而線程執(zhí)行失敗。 作用 通過版本號(hào)解決ABA的問題。 示例 public class AtomicStampedReferenceDemo { static AtomicStampedReference...

    xiaoxiaozi 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之顯示鎖Lock

    摘要:顯示鎖和內(nèi)置鎖內(nèi)置鎖優(yōu)勢代碼簡潔不會(huì)因?yàn)闆]釋放鎖,導(dǎo)致鎖泄露。顯示鎖優(yōu)勢靈活性強(qiáng),鎖的獲取可以被中斷,可以嘗試獲取鎖。接口接口主要方法如下獲取鎖嘗試獲取鎖,表示未加鎖的情況。會(huì)進(jìn)行搶鎖操作,如果獲取不到鎖,也會(huì)進(jìn)入阻塞隊(duì)列等到喚醒。 顯示鎖和內(nèi)置鎖 內(nèi)置鎖(Synchronized)優(yōu)勢 代碼簡潔 不會(huì)因?yàn)闆]釋放鎖,導(dǎo)致鎖泄露。 顯示鎖(Lock)優(yōu)勢 靈活性強(qiáng),鎖的獲取可以被中...

    zone 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之AQS

    摘要:原理全稱,當(dāng)線程去獲取資源的時(shí)候,會(huì)根據(jù)狀態(tài)值來判斷是否有鎖,如果有鎖,則加入到鏈表,鏈表里的線程,通過自旋,判斷資源是否已經(jīng)釋放,如果釋放,則獲取資源。 原理 全稱AbstractQueuedSynchronizer,當(dāng)線程去獲取資源的時(shí)候,會(huì)根據(jù)狀態(tài)值state來判斷是否有鎖,如果有鎖,則加入到鏈表,鏈表里的線程,通過自旋,判斷資源是否已經(jīng)釋放,如果釋放,則獲取資源。 AQS結(jié)構(gòu) ...

    Tikitoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<