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