Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

          AtomicInteger,一個提供原子操作的Integer的類。在Java語言中,++i和i++操作并不是線程安全的,在使用的時候,不可避免的會用到synchronized關(guān)鍵字。而AtomicInteger則通過一種線程安全的加減操作接口。

          來看AtomicInteger提供的接口。

          //獲取當(dāng)前的值

          public final int get()

          //取當(dāng)前的值,并設(shè)置新的值

          ?public final int getAndSet(int newValue)

          //獲取當(dāng)前的值,并自增

          ?public final int getAndIncrement()

          //獲取當(dāng)前的值,并自減

          public final int getAndDecrement()

          //獲取當(dāng)前的值,并加上預(yù)期的值

          public final int getAndAdd(int delta)

          ... ...


          下面是一個對比測試,我們寫一個synchronized的方法和一個AtomicInteger的方法來進(jìn)行測試,直觀的感受下性能上的差異

          [java] ? view plain copy
          1. package ?zl.study.concurrency;??
          2. import ?java.util.concurrent.atomic.AtomicInteger;??
          3. public ? class ?AtomicIntegerCompareTest?{??
          4. ????private?int?value;??
          5. ??????
          6. ????public?AtomicIntegerCompareTest(int?value){??
          7. ????????this.value?=?value;??
          8. ????}??
          9. ??????
          10. ????public?synchronized?int?increase(){??
          11. ????????return?value++;??
          12. ????}??
          13. ??????
          14. ????public?static?void?main(String?args[]){??
          15. ????????long?start?=?System.currentTimeMillis();??
          16. ??????????
          17. ????????AtomicIntegerCompareTest?test?=?new?AtomicIntegerCompareTest(0);??
          18. ????????for(?int?i=0;i<?1000000;i++){??
          19. ????????????test.increase();??
          20. ????????}??
          21. ????????long?end?=?System.currentTimeMillis();??
          22. ????????System.out.println("time?elapse:"+(end?-start));??
          23. ??????????
          24. ????????long?start1?=?System.currentTimeMillis();??
          25. ??????????
          26. ????????AtomicInteger?atomic?=?new?AtomicInteger(0);??
          27. ??????????
          28. ????????for(?int?i=0;i<?1000000;i++){??
          29. ????????????atomic.incrementAndGet();??
          30. ????????}??
          31. ????????long?end1?=?System.currentTimeMillis();??
          32. ????????System.out.println("time?elapse:"+(end1?-start1)?);??
          33. ??????????
          34. ??????????
          35. ????}??
          36. }??

          結(jié)果

          time elapse:31
          time elapse:16
          由此不難看出,通過JNI本地的CAS性能遠(yuǎn)超synchronized關(guān)鍵字

          ?

          Reference

          http://stackoverflow.com/questions/2443239/java-atomicinteger-what-are-the-differences-between-compareandset-and-weakcompar

          posted on 2013-01-31 17:15 禮物 閱讀(732) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。

          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宁海县| 堆龙德庆县| 根河市| 大悟县| 来安县| 丹阳市| 潮安县| 本溪市| 三穗县| 泊头市| 衡东县| 东乌| 滁州市| 华安县| 桂林市| 麻栗坡县| 吉隆县| 通海县| 尉氏县| 永兴县| 岳阳县| 衡南县| 抚远县| 张家川| 新巴尔虎右旗| 安顺市| 扶绥县| 内乡县| 定襄县| 韩城市| 都匀市| 白城市| 旬邑县| 安宁市| 中卫市| 漳州市| 浠水县| 宜良县| 永仁县| 华亭县| 杭锦后旗|