volatile与synchronized的区别
生活随笔
收集整理的這篇文章主要介紹了
volatile与synchronized的区别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
volatile主要用在多個(gè)線程感知實(shí)例變量被更改了場合,從而使得各個(gè)線程獲得最新的值。它強(qiáng)制線程每次從主內(nèi)存中講到變量,而不是從線程的私有內(nèi)存中讀取變量,從而保證了數(shù)據(jù)的可見性。
關(guān)于synchronized,可參考:JAVA多線程之Synchronized關(guān)鍵字--對(duì)象鎖的特點(diǎn)
比較:
①volatile輕量級(jí),只能修飾變量。synchronized重量級(jí),還可修飾方法
②volatile只能保證數(shù)據(jù)的可見性,不能用來同步,因?yàn)槎鄠€(gè)線程并發(fā)訪問volatile修飾的變量不會(huì)阻塞。
synchronized不僅保證可見性,而且還保證原子性,因?yàn)?#xff0c;只有獲得了鎖的線程才能進(jìn)入臨界區(qū),從而保證臨界區(qū)中的所有語句都全部執(zhí)行。多個(gè)線程爭搶synchronized鎖對(duì)象時(shí),會(huì)出現(xiàn)阻塞。
?
線程安全性
線程安全性包括兩個(gè)方面,①可見性。②原子性。
從上面自增的例子中可以看出:僅僅使用volatile并不能保證線程安全性。而synchronized則可實(shí)現(xiàn)線程的安全性。
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
總結(jié)
以上是生活随笔為你收集整理的volatile与synchronized的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度解析JVM
- 下一篇: diamond淘宝框架使用