一、vlatile關(guān)鍵字的理解
https://www.cnblogs.com/study-everyday/p/8618802.html
對于可見性段多,Java提供了volatile關(guān)鍵字來保證可見性首量。
當一個共享變量被volatile修飾時,它會保證修改的值會立即被更新到主存(中間不在穿插其他指令)进苍,當有其他線程需要讀取時加缘,它會去內(nèi)存中讀取新值。
而普通的共享變量不能保證可見性觉啊,因為普通共享變量被修改之后拣宏,什么時候被寫入主存是不確定的(中間可能穿插其他指令),當其他線程去讀取時杠人,此時內(nèi)存中可能還是原來的舊值勋乾,因此無法保證可見性。
Java內(nèi)存模型是通過在變量修改后將新值同步回主內(nèi)存嗡善,在變量讀取前從主內(nèi)存刷新變量值這種依賴主內(nèi)存作為傳遞媒介的方式來實現(xiàn)可見性的辑莫,無論是普通變量還是volatile變量都是如此普通變量與volatile變量的區(qū)別是,volatile的特殊規(guī)則保證了新值能立即同步到主內(nèi)存罩引,以及每次使用前立即從主內(nèi)存刷新摆昧。因此我們可以說volatile保證了多線程操作時變量的可見性,而普通變量則不能保證這一點蜒程。
另外,通過synchronized和Lock也能夠保證可見性伺帘,synchronized和Lock能保證同一時刻只有一個線程獲取鎖然后執(zhí)行同步代碼昭躺,并且在釋放鎖之前會將對變量的修改刷新到主存當中。因此可以保證可見性伪嫁。
二领炫、對于先行發(fā)生的理解
http://www.reibang.com/p/8c6efbb80e5d
三、AQS源碼解析
https://www.cnblogs.com/micrari/p/6937995.html
四张咳、線程池
http://www.reibang.com/p/9a8c81066201
五帝洪、二進制運算
byte:1個字節(jié) 8位 -128~127
short?:2個字節(jié) 16位char:2個字節(jié) 16bit
int?:4個字節(jié) 32位float:4個字節(jié) 32bit
long:8個字節(jié) 64位double?:8個字節(jié) 64bit
有符號右移>>: 右移之后似舵, 左邊的補上符號位, 正數(shù)補0葱峡, 負數(shù)補1砚哗。
無符號右移>>>: 右移之后, 無論該數(shù)是正數(shù)還是負數(shù)砰奕, 右移之后左邊都是補上0蛛芥。
https://blog.csdn.net/qq_25406563/article/details/83277660
六、synchornized底層原理:?
?https://blog.csdn.net/github_38838414/article/details/81110128