Atomic类只能保证本身方法的原子性

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

猜你喜欢

转载自young-2017.iteye.com/blog/2367514