• 消融
    2019-08-24
    public class AtomicNumberAppMain {



        private AtomicLong atomicLong = new AtomicLong(0);
    AtomicLong是否具有volatile的功能啊,要不然主线程拿到的不一定是最终值啊?
        private volatile long longVar = 0;



        public static void main(String[] args) throws InterruptedException {

            AtomicNumberAppMain atomicNumberAppMain = new AtomicNumberAppMain();

            int loop = Integer.MAX_VALUE / 10;



            // TODO 并发使用线程给AtomicLong对象加一

            int parallel = 10;

            List<Thread> atomicThreads = new ArrayList<>();

            for (int p = 0; p < parallel; p++) {

                int loopCount = loop / parallel;

                if (p == parallel - 1) {

                    loopCount = loop - (loop / parallel) * (parallel - 1);

                }

                int finalLoopCount = loopCount;

                Thread atomic = new Thread(() -> {

                    long start = System.currentTimeMillis();



                    for (int i = 0; i < finalLoopCount; i++) {

                        atomicNumberAppMain.atomicLong.incrementAndGet();

                    }

                    System.out.println("Atomic takes " + (System.currentTimeMillis() - start));

                });

                atomic.start();

                atomicThreads.add(atomic);

            }
    展开

    作者回复:
    AtomicLong 里用的就是volatile的long

    
    
我们在线,来聊聊吧