天天看點

voliate和synchronized「建議收藏」

大家好,又見面了,我是你們的朋友全棧君。

線程安全考慮三個方面:原子性,可見性,有序性

為什麼使用voliate關鍵字?

正常情況下編譯器為了加快程式運作的速度,對一些變量的寫操作會先在寄存器或者是CPU緩存上進行,最後才寫入記憶體.而在這個過程,變量的新值對其他線程是不可見的.而volatile的作用就是使它修飾的變量的讀寫操作都必須在記憶體中進行!

voliate和synchronized「建議收藏」
  • voliate和synchronized差別
  • volatile本質是在告訴jvm目前變量在寄存器中的值是不确定的,需要從主存中讀取,synchronized則是鎖定目前變量,隻有目前線程可以通路該變量,其他線程被阻塞住.
  • volatile僅能使用在變量級别,synchronized則可以使用在變量,方法.
  • volatile僅能實作變量的修改可見性,但不具備原子特性,而synchronized則可以保證變量的修改可見性和原子性.
  • volatile不會造成線程的阻塞,而synchronized可能會造成線程的阻塞.
  • volatile标記的變量不會被編譯器優化,而synchronized标記的變量可以被編譯器優化.

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/136335.html原文連結:https://javaforall.cn