Java中的原子操作包括:
1)除long和double之外的基本類型的賦值操作
2)所有引用reference的賦值操作
3)java.concurrent.Atomic.* 包中所有類的一切操作
count++不是原子操作,是3個原子操作組合
1.讀取主存中的count值,賦值給一個局部成員變量tmp
2.tmp+1
3.將tmp賦值給count
可能會出現線程1運行到第2步的時候,tmp值為1;這時CPU調度切換到線程2執行完畢,count值為1;切換到線程1,繼續執行第3步,count被賦值為1------------結果就是兩個線程執行完畢,count的值只加了1;
還有一點要注意,如果使用AtomicInteger.set(AtomicInteger.get() + 1),會和上述情況一樣有並發問題,要使用AtomicInteger.getAndIncrement()才可以避免並發問題