Java并发机制深究1-synchronized和volatile
?在多線程并發編程中,synchronized和volatile都是很重要的,volatile是輕量級的synchronized。在多處理器編程中保證共享變量的統一性。
1.volatile的使用和原理
如果一個變量被聲明為volatile,java線程內存模型確保所有線程中得到變量的值是一致的。
在對volatile修飾的變量進行賦值操作時會引發兩個操作:
<1> 把當前處理器緩沖行中的數據寫入內存;
<2> 寫回內存的操作會使其他cpu中緩存的數據無效。
2.synchronized的原理
Java中的每一個對象都可以作為鎖,具體表現為:
<1> 對于普通同步方法,鎖是當前實例對象;
<2> 對于靜態同步方法,鎖是當前class對象;
<3> 對于同步代碼塊,鎖是synchronized括號里配置的對象;
從jvm規范中可以看出synchronized的實現原理,jvm是根據monitor對象來實現的。代碼塊同步是根據monitorenter和monitorexit指令實現的。
monitorenter指令在編譯后插入到同步代碼塊的開始位置,而monitorexit是插入到代碼塊的結束和異常處,jvm要保證monitorenter和monitorexit進行配對。當線程執行到monitorenter指令時,獲取對象所對應的monitor的所有權,獲得對象的鎖,此時其他線程訪問此對象就處于阻塞狀態。當執行到monitorexit時,線程會釋放掉鎖。
轉載于:https://www.cnblogs.com/wuyuetian/p/5498937.html
總結
以上是生活随笔為你收集整理的Java并发机制深究1-synchronized和volatile的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BYS推荐MS前端PhoneCall面试
- 下一篇: [改善Java代码]生成子列表后不要再操