Volatile和synchronized

多線程爲什麼會發生問題:

    如下圖所示,不同線程運行在不同的cpucpu核心中,在cpu和主存之間,還存在一層緩存,因此cpu在讀取一個變量時,會先讀取到緩存,再進入cpu的寄存器,寫入時也是如此,會先進入緩存,再寫入主存。這樣就會導致不同線程之間的衝突了。

 

兩者在內存中的表現

Volatile

    被Volatile修飾的變量,會越過緩存,cpu的讀寫操作直接刷到主存(通過memory barrier來實現),這樣一來,可以保證原子操作的線程安全。

Synchronized

    被synchronized修飾的代碼塊,在被一個線程讀取後,會加鎖,直到同步部分操作完成,纔會釋放鎖,其他的線程才能操作這部分主存。

 

優缺點:

Volatile

  • 優點:不加鎖,不會發生線程阻塞。
  • 缺點:只能修飾基本類型,必須是原子操作。

Synchronized

  • 優點:能修飾變量、方法、類,能保證代碼塊操作的原子性
  • 缺點:可能發生線程阻塞。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章