日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

原子变量、volatile、synchronized的可见性和原子性比较

發布時間:2025/4/5 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原子变量、volatile、synchronized的可见性和原子性比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

? ? ? jdk5提供了java.util.concurrent包,這個包并行功能強大,工具齊全,其中就包括原子變量atomic

? ? ? 那么我們先說說volatile,volatile可以保證內存的可見性,禁用重排序,但是不能保證操作的原子性,不具備互斥性,那么,什么時候可以用volatile呢?必須同時滿足以下三條:

  • 不依賴自己:寫變量時并不依賴變量的當前值。
  • 不依賴別人:變量不與其他狀態共同組成invariant。
  • 訪問變量時,沒有其他原因需要加鎖。

? ? ? ?只解釋一下第一條,“不依賴自己的當前值”,舉個簡單的例子:count++, 這個就叫依賴當前值。為什么要有這樣的限制?因為,volatile不保證count++是原子的,即我們所說的“互斥執行”,雖然我們過去的例子都把一條代碼當作一個動作,但相信你知道,一條代碼在CPU那里多半不會是一條指令,比如count++其實會分解為load-modify-store三個更小的動作,如果這樣的操作有多個線程在做,是極易出錯的。

? ? ?原子變量的特點在于其原子性的CAS(compare-and-swap)操作,由此可以完成volatile所不能的“check-and-act”動作,同時它可以保證內存的可見性,“可見性”只不過是其稍帶腳支持的功能而已。

? ? ? Java.util.concurrent中實現的原子操作類包括:AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。另外其底層就是volatile和CAS 共同作用的結果:

? ? ?1.首先使用了volatile 保證了內存可見性。

? ? ?2.然后使用了CAS(compare-and-swap)算法 保證了原子性。

? ? ?其中CAS算法的原理就是里面包含三個值:內存值A ?預估值V ?更新值 B ?當且僅當 V == A 時,V = B; 否則,不會執行任何操作。

? ? ? synchronized鎖不僅僅有“互斥”的功能,將多步操作加鎖保證了原子操作,而且還保證了內存可見性

?

轉載于:https://my.oschina.net/GinkGo/blog/1560155

總結

以上是生活随笔為你收集整理的原子变量、volatile、synchronized的可见性和原子性比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。