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 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
  • Atomic类只能保证本身方法的原子性_第1张图片
  • 大小: 40.4 KB
  • Atomic类只能保证本身方法的原子性_第2张图片
  • 大小: 34.9 KB
  • 查看图片附件

你可能感兴趣的:(thread,java)