溫馨提示×

溫馨提示×

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

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

怎么深入理解Java多線程與并發(fā)框中的順序一致性模型

發(fā)布時(shí)間:2021-11-17 13:52:06 來源:億速云 閱讀:101 作者:柒染 欄目:軟件技術(shù)

怎么深入理解Java多線程與并發(fā)框中的順序一致性模型,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

一、競態(tài)條件(Race Condition)

計(jì)算的正確性取決于 多個(gè)線程 執(zhí)行的 時(shí)序 時(shí),就會發(fā)生 競態(tài)條件。

二、順序一致性模型

對內(nèi)存可見性的保證 對多線程并發(fā)時(shí)的串行化保證

順序一致性模型的兩大特征:

  • 一個(gè)線程中的所有操作必須按照程序的順序來執(zhí)行。

  • (不管程序是否同步)所有線程都只能看到一個(gè)單一的操作執(zhí)行順序。在順序一致性內(nèi)存模型中,每個(gè)操作都必須原子執(zhí)行且立刻對所有線程可見。

在概念上,順序一致性模型有一個(gè)單一的全局內(nèi)存,這個(gè)內(nèi)存通過一個(gè)左右擺動(dòng)的開關(guān)可以連接到任意一個(gè)線程。同時(shí),每一個(gè)線程必須按程序的順序來執(zhí)行內(nèi)存讀/寫操作。從上圖我們可以看出,在任意時(shí)間點(diǎn)最多只能有一個(gè)線程可以連接到內(nèi)存。當(dāng)多個(gè)線程并發(fā)執(zhí)行時(shí),圖中的開關(guān)裝置能把所有線程的所有內(nèi)存讀/寫操作串行化。

為了更好的理解,下面我們通過兩個(gè)示意圖來對順序一致性模型的特性做進(jìn)一步的說明:

假設(shè)有兩個(gè)線程A和B并發(fā)執(zhí)行。其中A線程有三個(gè)操作,它們在程序中的順序是:A1->A2->A3。B線程也有三個(gè)操作,它們在程序中的順序是:B1->B2->B3。 假設(shè)這兩個(gè)線程使用監(jiān)視器來正確同步:A線程的三個(gè)操作執(zhí)行后釋放監(jiān)視器,隨后B線程獲取同一個(gè)監(jiān)視器。那么程序在順序一致性模型中的執(zhí)行效果將如下圖所示: 多線程并發(fā)執(zhí)行多操作的模型

看完上述內(nèi)容,你們掌握怎么深入理解Java多線程與并發(fā)框中的順序一致性模型的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI