Java 多併發之原子訪問(Atomic Access)

在編程中,一個原子操做是隻會出現一次的。一個原子操做在中間不會中止:要麼所有發生要麼一點也不發生。咱們只有在原子操做完成以後纔會看到原子操做的具體影響。程序員

甚至是很是簡單的表達式可以構造分解爲簡單操做的複雜操做。可是,你能夠指定一些原子操做:編程

  • 對於全部的引用變量和大部分的原始類型(除了long和double)變量來講讀寫是原子操做。
  • 對於定義爲了volatile 的全部變量來講讀寫是原子的。

原子操做不會交錯執行因此沒有必要擔憂線程衝突的問題。可是這樣就說沒有必要同步全部的原子操做,由於一致性錯誤仍然可能發生。使用volatile變量能夠減小內存一致性錯誤,由於任何寫入volatile 變量的值會被其餘的讀到的是相同值。這說明對volatile 變量的修改對其餘線程都是可見的。並且這意味找當一個線程讀取一個volatile變量的時候,這不單單說明能夠讀取針對volatile 變量的最新修改值還看到對代碼的影響。線程

使用簡單的原子變量比訪問同步操做中的原來更加有效,可是這個須要程序員當心的去避免內存一致性問題。這個額外工做是否值得但是須要取決於應用的複雜性和規模了。內存

相關文章
相關標籤/搜索