<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    AtomicInteger

    Posted on 2011-10-17 10:53 瘋狂 閱讀(9612) 評論(2)  編輯  收藏 所屬分類: concurrent

    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)

    ... ...

    我們在上一節提到的CAS主要是這兩個方法

        public final boolean compareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
        }

        public final boolean weakCompareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
        }

    這兩個方法是名稱不同,但是做的事是一樣的,可能在后續的java版本里面會顯示出區別來。

    詳細查看會發現,這兩個接口都是調用一個unsafe的類來操作,這個是通過JNI實現的本地方法,細節就不考慮了。

     

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

     

     
    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.         forint 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.         forint 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


    評論

    # re: AtomicInteger  回復  更多評論   

    2012-04-23 15:35 by IT民工學習網網
    http://www.easy518.com

    # re: AtomicInteger  回復  更多評論   

    2013-10-14 15:30 by 冰上王國
    你這測試用例沒有涉及到多線程,怎么好比較兩者的差別?

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


    網站導航:
     
    主站蜘蛛池模板: 美女羞羞喷液视频免费| 亚洲砖码砖专无区2023| 亚洲精品国产电影| 亚洲深深色噜噜狠狠爱网站| 无码乱人伦一区二区亚洲| 亚洲国产综合第一精品小说| 国产精品国产亚洲区艳妇糸列短篇 | 亚洲av无码专区在线电影天堂 | 亚洲AV无码一区二区三区电影 | 99久久久国产精品免费无卡顿 | 女人18毛片a级毛片免费视频| 国产成人精品男人免费| 亚洲Av无码专区国产乱码DVD| 亚洲熟女综合色一区二区三区 | 国产亚洲美女精品久久久2020| 亚洲国产综合精品| 野花高清在线观看免费完整版中文| 亚洲成AⅤ人影院在线观看| 久久久久亚洲AV无码专区首JN| 337P日本欧洲亚洲大胆艺术图| 国产婷婷高清在线观看免费| 日韩a毛片免费观看| 免费A级毛片无码免费视| 亚洲视频国产精品| 歪歪漫画在线观看官网免费阅读 | 在线观看成人免费视频| 国产成人综合久久精品亚洲| 久久精品女人天堂AV免费观看| 亚洲精品动漫免费二区| 黄页免费的网站勿入免费直接进入| 亚洲乱码精品久久久久..| 看Aⅴ免费毛片手机播放| 亚洲午夜av影院| 人妻仑刮八A级毛片免费看| 亚洲情XO亚洲色XO无码| 亚洲高清中文字幕免费| 色视频在线观看免费| 亚洲av网址在线观看| 免费网站看v片在线香蕉| 亚洲综合一区国产精品| 亚洲av午夜成人片精品电影|