原子量就是操做變量的操做是「原子的」,該操做不可再分,所以是線程安全的。對於想i++這中操做就適合使用原子量。java
前面章節中volatile修飾的race++ 的出現錯誤 ,如今咱們使用原子量就能夠解決。安全
代碼以下:spa
public class VolatileTestA { private static AtomicInteger race = new AtomicInteger(0); private static final int THREAD_COUNT = 200; public static void main(String[] args) { Thread[] threads = new Thread[THREAD_COUNT]; for(int i = 0; i < THREAD_COUNT; i++){ threads[i] = new Thread(new Runnable() { public void run() { for(int i = 0; i < 2000; i++){ race.incrementAndGet(); } } }); threads[i].start(); } while (Thread.activeCount() > 1) { Thread.yield(); System.out.println(race); } } }
注意:原子量只是保證單個變量在某一個操做過程的安全,但沒法保證你整個代碼塊,爲了保證代碼塊的安全就得使用鎖機制。線程