Java进阶教程-马士兵
一,操作系統(tǒng)原理
ALU是運(yùn)算單元,PC是程序計(jì)數(shù)器,Registers寄存器存儲(chǔ)運(yùn)算的數(shù)據(jù)。L1級緩存,L2級緩存方便對數(shù)據(jù)進(jìn)行訪問。
攜程面試問到volatile可見性的實(shí)現(xiàn),其實(shí)是用volatile聲明的變量如果被某一個(gè)線程修改,首先該值會(huì)更新到主存去,通過對讀,寫設(shè)置內(nèi)存屏障,注意兩點(diǎn)1、一旦完成寫入,任何訪問這個(gè)字段的線程將會(huì)得到最新的值。2、在寫入前,保證所有之前發(fā)生的事已經(jīng)發(fā)生,并且任何更新過的數(shù)據(jù)值也是可見的,因?yàn)閮?nèi)存屏障會(huì)把之前的寫入值都刷新到緩存。這里JVM要求的實(shí)現(xiàn)比較嚴(yán)格,存儲(chǔ)和存儲(chǔ),讀取和讀取之間都有內(nèi)存屏障(實(shí)現(xiàn)內(nèi)存屏障的方式可能是lock鎖總線,可能是原語)
二,多線程高并發(fā)
1,synchronized
必須是可重入鎖:為什么?
當(dāng)一個(gè)子類對象獲取了鎖,在執(zhí)行過程中需要調(diào)用該子類父類的synchronized方法,由于都要獲取一個(gè)對象的鎖,如果不能重入,就會(huì)導(dǎo)致死鎖。
synchronized鎖的是對象
synchronized鎖定的方法和非鎖定的方法相互執(zhí)行不沖突
synchronized不要用String,Integer,Long這些類型
synchronized底層實(shí)現(xiàn)(Hotspot的實(shí)現(xiàn))
2,volatile
保證線程可見性:
MESI 緩存一致性協(xié)議保證不同CPU之間的緩存可見性
禁止指令重排序
雙重校驗(yàn)鎖中new的問題
總結(jié)
以上是生活随笔為你收集整理的Java进阶教程-马士兵的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可汗学院
- 下一篇: 消费者物价指数CPI