2.java內(nèi)存模型與線程

一、vlatile關(guān)鍵字的理解

https://www.cnblogs.com/study-everyday/p/8618802.html

對(duì)于可見性,Java提供了volatile關(guān)鍵字來保證可見性。

當(dāng)一個(gè)共享變量被volatile修飾時(shí),它會(huì)保證修改的值會(huì)立即被更新到主存(中間不在穿插其他指令),當(dāng)有其他線程需要讀取時(shí),它會(huì)去內(nèi)存中讀取新值。

而普通的共享變量不能保證可見性,因?yàn)?b>普通共享變量被修改之后,什么時(shí)候被寫入主存是不確定的(中間可能穿插其他指令),當(dāng)其他線程去讀取時(shí),此時(shí)內(nèi)存中可能還是原來的舊值,因此無(wú)法保證可見性。

Java內(nèi)存模型是通過在變量修改后將新值同步回主內(nèi)存,在變量讀取前從主內(nèi)存刷新變量值這種依賴主內(nèi)存作為傳遞媒介的方式來實(shí)現(xiàn)可見性的,無(wú)論是普通變量還是volatile變量都是如此普通變量與volatile變量的區(qū)別是,volatile的特殊規(guī)則保證了新值能立即同步到主內(nèi)存,以及每次使用前立即從主內(nèi)存刷新。因此我們可以說volatile保證了多線程操作時(shí)變量的可見性,而普通變量則不能保證這一點(diǎn)。

另外,通過synchronized和Lock也能夠保證可見性,synchronized和Lock能保證同一時(shí)刻只有一個(gè)線程獲取鎖然后執(zhí)行同步代碼,并且在釋放鎖之前會(huì)將對(duì)變量的修改刷新到主存當(dāng)中。因此可以保證可見性。

二、對(duì)于先行發(fā)生的理解

http://www.itdecent.cn/p/8c6efbb80e5d

三、AQS源碼解析

https://www.cnblogs.com/micrari/p/6937995.html

四、線程池

http://www.itdecent.cn/p/9a8c81066201

五、二進(jìn)制運(yùn)算

byte:1個(gè)字節(jié) 8位 -128~127

short?:2個(gè)字節(jié) 16位char:2個(gè)字節(jié) 16bit

int?:4個(gè)字節(jié) 32位float:4個(gè)字節(jié) 32bit

long:8個(gè)字節(jié) 64位double?:8個(gè)字節(jié) 64bit

有符號(hào)右移>>: 右移之后, 左邊的補(bǔ)上符號(hào)位, 正數(shù)補(bǔ)0, 負(fù)數(shù)補(bǔ)1。

無(wú)符號(hào)右移>>>: 右移之后, 無(wú)論該數(shù)是正數(shù)還是負(fù)數(shù), 右移之后左邊都是補(bǔ)上0。

https://blog.csdn.net/qq_25406563/article/details/83277660

六、synchornized底層原理:?

?https://blog.csdn.net/github_38838414/article/details/81110128

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容