国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

java 多個(gè)線程可以讀一個(gè)變量,只有一個(gè)線程可以對(duì)這個(gè)變量進(jìn)行寫(xiě),到底要不要加鎖?

多個(gè)線程可以讀一個(gè)變量,只有一個(gè)線程可以對(duì)這個(gè)變量進(jìn)行寫(xiě),到底要不要加鎖?下面簡(jiǎn)要解釋一下原因:鎖定是因?yàn)椴僮鞑皇窃拥?。讓我們用操作一?lái)解釋它??聪旅鎯蓚€(gè)圖。我這個(gè)操作需要看上面的第二個(gè)圖,你能很清

多個(gè)線程可以讀一個(gè)變量,只有一個(gè)線程可以對(duì)這個(gè)變量進(jìn)行寫(xiě),到底要不要加鎖?

下面簡(jiǎn)要解釋一下原因:

鎖定是因?yàn)椴僮鞑皇窃拥摹W屛覀冇貌僮饕粊?lái)解釋它。看下面兩個(gè)圖。

我這個(gè)操作需要

看上面的第二個(gè)圖,你能很清楚地理解這個(gè)過(guò)程嗎?

鎖定是為了確保上述三個(gè)步驟是原子操作。

回到問(wèn)題上來(lái),只有一個(gè)線程要寫(xiě),沒(méi)有競(jìng)爭(zhēng),所以不需要鎖定。

但是,如果你看第一張圖片,因?yàn)橹鲀?nèi)存和本地內(nèi)存的存在

在一個(gè)線程寫(xiě)入后,其他線程無(wú)法立即看到它。這就是可見(jiàn)性問(wèn)題。

添加volatile關(guān)鍵字后,它將在操作后強(qiáng)制工作內(nèi)存和主內(nèi)存同步,以確保其他線程可以立即看到它。

volatile關(guān)鍵字在Java中有什么作用?

Volatile是為了防止指令重新排序以確??梢?jiàn)性

對(duì)于JVM級(jí)別,是為了防止編譯器重新排序

同時(shí),對(duì)于某些CPU,它們會(huì)通過(guò)緩存鎖或線程來(lái)解決緩存可見(jiàn)性

但是,目前很多CPU已經(jīng)過(guò)優(yōu)化,由于cache一致性MESI會(huì)帶來(lái)性能開(kāi)銷,因此采用storebuffer機(jī)制進(jìn)行異步處理,這種機(jī)制會(huì)導(dǎo)致指令的無(wú)序執(zhí)行。這會(huì)導(dǎo)致可見(jiàn)性問(wèn)題。

Volatile將在CPU級(jí)別增加內(nèi)存屏障,以解決CPU執(zhí)行無(wú)序?qū)е碌目梢?jiàn)性問(wèn)題

共享鎖(s lock)也稱為讀鎖。如果事務(wù)t將s鎖添加到數(shù)據(jù)對(duì)象a,則事務(wù)t可以讀取a,但不能修改a。其他事務(wù)只能將s鎖添加到a,而不能添加x鎖,直到t釋放a上的s鎖。這確保了其他事務(wù)可以讀取a,但在t釋放a上的s鎖之前,t不能對(duì)a進(jìn)行任何更改。

獨(dú)占鎖(x鎖)也稱為寫(xiě)入鎖上。如果事務(wù)t將x鎖應(yīng)用于數(shù)據(jù)對(duì)象a,則事務(wù)t可以讀取a或修改a。在t釋放a上的鎖之前,其他事務(wù)無(wú)法將任何鎖應(yīng)用于a。這確保了在t釋放a上的鎖之前,其他事務(wù)無(wú)法讀取和修改a