volatile与synchronized的区别
生活随笔
收集整理的這篇文章主要介紹了
volatile与synchronized的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
volatile主要用在多個線程感知實例變量被更改了場合,從而使得各個線程獲得最新的值。它強制線程每次從主內存中講到變量,而不是從線程的私有內存中讀取變量,從而保證了數據的可見性。
關于synchronized,可參考:JAVA多線程之Synchronized關鍵字--對象鎖的特點
比較:
①volatile輕量級,只能修飾變量。synchronized重量級,還可修飾方法
②volatile只能保證數據的可見性,不能用來同步,因為多個線程并發訪問volatile修飾的變量不會阻塞。
synchronized不僅保證可見性,而且還保證原子性,因為,只有獲得了鎖的線程才能進入臨界區,從而保證臨界區中的所有語句都全部執行。多個線程爭搶synchronized鎖對象時,會出現阻塞。
?
線程安全性
線程安全性包括兩個方面,①可見性。②原子性。
從上面自增的例子中可以看出:僅僅使用volatile并不能保證線程安全性。而synchronized則可實現線程的安全性。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的volatile与synchronized的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度解析JVM
- 下一篇: 解决Mysql读写分离数据延迟