package com.example.threadDemo; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * Created by szy on 2017/4/5. */ public class MultiAtomicInteger { private static AtomicInteger count = new AtomicInteger(0); /** 单一count.addAndGet()是原子性的,但多次则不能保证, 通过synchronized 实现多次 操作的原子性 */ /** private synchronized int multiAdd(){} */ private int multiAdd() { count.addAndGet(1); count.addAndGet(2); count.addAndGet(3); count.addAndGet(4); return count.get(); } public static void main(String[] args) { final MultiAtomicInteger multiAtomicInteger = new MultiAtomicInteger(); List<Thread> threads = new ArrayList<>(); for (int i = 0; i < 100; i++) { threads.add(new Thread( new Runnable() { @Override public void run() { System.out.println(multiAtomicInteger.multiAdd()); } } )); } for (Thread thread : threads) { thread.start(); } } }
如果是原子性,最终结果应该是1000