同步块与原子性的耗时比较

package javaBasic;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerCompareTest {
    private Integer value;
    private AtomicInteger atomic;

    public AtomicIntegerCompareTest() {
        this.value = 0;
        atomic = new AtomicInteger(0);
    }

    void runSync() {
        long start = System.currentTimeMillis();

        // for (int i = 0; i < 1000000; i++) {
        // synchronized (value) {
        // value++;
        // }
        // }
        // Synchronized time elapse:63
        // 估计每次迭代都会check对象的同步性这个应该会花些时间

        /**
         * 以下代码与上面的代码有何不同?哪个更加耗时?为什么? 
         * 你可以打开如下代码试一试,有点意思。
         */
        synchronized (value) {
            for (int i = 0; i < 1000000; i++) {

                value++;
            }
        }
        // Synchronized time elapse:31
        // check同步性在迭代之外,迭代没有消耗时间。

        long end = System.currentTimeMillis();
        System.out.println("Synchronized time elapse:" + (end - start));
    }

    void runAtomic() {
        long start1 = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            atomic.incrementAndGet();
        }
        long end1 = System.currentTimeMillis();
        System.out.println("AtomicInteger time elapse:" + (end1 - start1));
        // AtomicInteger time elapse:31
    }

    public static void main(String args[]) {
        final AtomicIntegerCompareTest test = new AtomicIntegerCompareTest();
        new Thread() {
            @Override
            public void run() {
                test.runSync();

            }
        }.start();

        new Thread() {
            @Override
            public void run() {
                test.runAtomic();
            }
        }.start();

    }
}


你可能感兴趣的:(synchronized,atomicinteger)