可見性與原子性

原子性:spa

    不能被線程調度器中斷的操做,好比"a = 1;"和 "return a;"這樣的操做都具備原子性線程

可見性:blog

相似"a += b"這樣的操做不具備原子性,由於在某些JVM中"a += b"可能要通過這樣三個步驟:內存

(1)取出a和b同步

(2)計算a+b方法

(3)將計算結果寫入內存im

若是有兩個線程t1,t2在進行這樣的操做。t1在第二步作完以後還沒來得及把數據寫回內存就被線程調度器中斷了,因而t2開始執行,t2執行完畢後t1又把沒有完成的第三步作完。這個時候就出現了錯誤,至關於t2的計算結果被無視掉了。因此上面的買碘片例子在同步add方法以前,實際結果老是小於預期結果的,由於不少操做都被無視掉了。數據

相似的,像"a++"這樣的操做也都不具備原子性:img

相關文章
相關標籤/搜索