AtomicLong与LongAdder执行效率对比
生活随笔
收集整理的這篇文章主要介紹了
AtomicLong与LongAdder执行效率对比
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?AtomicLong與LongAdder執(zhí)行效率對比:
package com.mashibing.juc.c_018_00_AtomicXXX;import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.LongAdder;public class T02_AtomicVsSyncVsLongAdder {static long count2 = 0L;static AtomicLong count1 = new AtomicLong(0L);static LongAdder count3 = new LongAdder();public static void main(String[] args) throws Exception {Thread[] threads = new Thread[1000];for(int i=0; i<threads.length; i++) {threads[i] =new Thread(()-> {for(int k=0; k<100000; k++) count1.incrementAndGet();});}long start = System.currentTimeMillis();for(Thread t : threads ) t.start();for (Thread t : threads) t.join();long end = System.currentTimeMillis();//TimeUnit.SECONDS.sleep(10);System.out.println("Atomic: " + count1.get() + " time " + (end-start));//-----------------------------------------------------------Object lock = new Object();for(int i=0; i<threads.length; i++) {threads[i] =new Thread(new Runnable() {@Overridepublic void run() {for (int k = 0; k < 100000; k++)synchronized (lock) {count2++;}}});}start = System.currentTimeMillis();for(Thread t : threads ) t.start();for (Thread t : threads) t.join();end = System.currentTimeMillis();System.out.println("Sync: " + count2 + " time " + (end-start));//----------------------------------for(int i=0; i<threads.length; i++) {threads[i] =new Thread(()-> {for(int k=0; k<100000; k++) count3.increment();});}start = System.currentTimeMillis();for(Thread t : threads ) t.start();for (Thread t : threads) t.join();end = System.currentTimeMillis();//TimeUnit.SECONDS.sleep(10);System.out.println("LongAdder: " + count1.longValue() + " time " + (end-start));}static void microSleep(int m) {try {TimeUnit.MICROSECONDS.sleep(m);} catch (InterruptedException e) {e.printStackTrace();}}}?
?
總結
以上是生活随笔為你收集整理的AtomicLong与LongAdder执行效率对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unsafe类方法详解
- 下一篇: 分布式锁的三种实现的对比