synchronized与atomic性能对比

写了两个例子,对这两种机制进行对比,发现性能差距在6倍以上。
synchronized的例子:

public class SyncInc {
    public static void main(String[] args) {
        CountDownLatch latch = new CountDownLatch(10);

        long begin = System.nanoTime();
        for (int i = 0; i < 10; i++) {
            new Thread() {
                @Override
                public void run() {
                    while (Number.get() < 100_000_000) {
                        Number.inc();
                    }

                    latch.countDown();
                }
            }.start();
        }

        try {
            latch.await();
            System.out.println("took " + (System.nanoTime() - begin) / 1_000_000 + " ms");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class Number {
    public static volatile int value = 0;
    public static synchronized void inc() {
        value++;
    }

    public static int get() {
        return value;
    }

Atomic的例子:

public class AtomicInc {
    public static void main(String[] args) {
        CountDownLatch latch = new CountDownLatch(10);

        long begin = System.nanoTime();
        for (int i = 0; i < 10; i++) {
            new Thread() {
                @Override
                public void run() {
                    while (AtomicNumber.get() < 100_000_000) {
                        AtomicNumber.inc();
                    }

                    latch.countDown();
                }
            }.start();
        }

        try {
            latch.await();
            System.out.println("took " + (System.nanoTime() - begin) / 1_000_000 + " ms");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class AtomicNumber {
    public static AtomicInteger value = new AtomicInteger(0);

    public static void inc() {
        value.incrementAndGet();
    }

    public static int get() {
        return value.get();
    }
}

你可能感兴趣的:(synchronized与atomic性能对比)