Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

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

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

          來看AtomicInteger提供的接口。

          //獲取當前的值

          public final int get()

          //取當前的值,并設置新的值

          ?public final int getAndSet(int newValue)

          //獲取當前的值,并自增

          ?public final int getAndIncrement()

          //獲取當前的值,并自減

          public final int getAndDecrement()

          //獲取當前的值,并加上預期的值

          public final int getAndAdd(int delta)

          ... ...


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

          [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. }??

          結果

          time elapse:31
          time elapse:16
          由此不難看出,通過JNI本地的CAS性能遠超synchronized關鍵字

          ?

          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)  編輯  收藏

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

          網站導航:
           
          主站蜘蛛池模板: 阿克陶县| 正蓝旗| 清水县| 翼城县| 拉孜县| 西藏| 旬邑县| 凭祥市| 海宁市| 西宁市| 五家渠市| 怀集县| 昭苏县| 姜堰市| 平舆县| 宝丰县| 西吉县| 凌源市| 于都县| 大石桥市| 枣强县| 银川市| 大英县| 宁国市| 民勤县| 利川市| 呼和浩特市| 襄垣县| 客服| 庄浪县| 凤山县| 扬州市| 牡丹江市| 五指山市| 肇州县| 东明县| 沁阳市| 拉萨市| 花莲市| 阿克苏市| 锦州市|