色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Java單例模式簡單嗎?

錢衛國2年前11瀏覽0評論

Java單例說起來簡單,很多初學者也學起來也認為很簡單,但是深入思考一下,就會發現沒那么簡單。

單例要考慮到多線程并發訪問的問題,就會變得復雜起來。如何保證線程安全?比較常見的方法就是使用DCL(DoubleCheckLock)單例。實現代碼如下:

這里還要特別注意,INSTANCE前還需要加上volatile修飾符。為什么要加這個修飾符呢?這里就涉及到CPU底層的一些知識了。簡單來說,CPU底層執行指令的時候會對不同的指令進行重排序,我們Java代碼里的一行代碼,在CPU底層可能是多條指令,如果發生了重排序,單例對象實例化過程中可能會把半初始化狀態的對象返回,那么當前線程獲取到的實例與其他線程獲取的完全初始化的對象就不一樣了。volatile修飾符,可以防止CPU底層對這一行代碼的相關指令進行重排序,直到對象完全初始化,保證多個線程訪問單例返回的是同一個對象。

所以,看似簡單的問題,其實也不簡單。