成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java AtomicInteger類使用方法實例講解

瀏覽:148日期:2022-08-30 18:52:03

1、java.util.concurrent.atomic 的包里有AtomicBoolean, AtomicInteger,AtomicLong,AtomicLongArray,AtomicReference等原子類的類,主要用于在高并發環境下的高效程序處理,來幫助我們簡化同步處理.

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

2、AtomicInteger的基本方法

創建一個AtomicInteger

System.out.println(atomicInteger.get());

--->輸出 : 123

創建一個不傳值的,默認值為0

AtomicInteger atomicInteger = new AtomicInteger();System.out.println(atomicInteger.get());---->輸出: 0

獲取和賦值

atomicInteger.get(); //獲取當前值atomicInteger.set(999); //設置當前值

atomicInteger.compareAndSet(expectedValue,newValue)

public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(0); System.out.println(atomicInteger.get()); int expectedValue = 123; int newValue = 234; Boolean b =atomicInteger.compareAndSet(expectedValue, newValue); System.out.println(b); System.out.println(atomicInteger); }----》輸出結果為: 0 false 0 public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(123); System.out.println(atomicInteger.get()); int expectedValue = 123; int newValue = 234; Boolean b =atomicInteger.compareAndSet(expectedValue, newValue); System.out.println(b); System.out.println(atomicInteger); }-----》輸出結果為: 123 true 234

由上可知該方法表示,atomicInteger的值與expectedValue相比較,如果不相等,則返回false,atomicInteger原有值保持不變;如果兩者相等,則返回true,atomicInteger的值更新為newValue

getAndAdd()方法與AddAndGet方法

AtomicInteger atomicInteger = new AtomicInteger(123); System.out.println(atomicInteger.get()); --123 System.out.println(atomicInteger.getAndAdd(10)); --123 獲取當前值,并加10 System.out.println(atomicInteger.get()); --133 System.out.println(atomicInteger.addAndGet(10)); --143 獲取加10后的值,先加10 System.out.println(atomicInteger.get()); --143

getAndDecrement()和DecrementAndGet()方法

AtomicInteger atomicInteger = new AtomicInteger(123); System.out.println(atomicInteger.get()); --123 System.out.println(atomicInteger.getAndDecrement()); --123 獲取當前值并自減 System.out.println(atomicInteger.get()); --122 System.out.println(atomicInteger.decrementAndGet()); --121 先自減再獲取減1后的值 System.out.println(atomicInteger.get()); --121

3、使用AtomicInteger,即使不用同步塊synchronized,最后的結果也是100,可用看出AtomicInteger的作用,用原子方式更新的int值。主要用于在高并發環境下的高效程序處理。使用非阻塞算法來實現并發控制。

public class Counter { public static AtomicInteger count = new AtomicInteger(0); public static void inc(){ try{ Thread.sleep(1); //延遲1毫秒 }catch (InterruptedException e){ //catch住中斷異常,防止程序中斷 e.printStackTrace(); } count.getAndIncrement();//count值自加1 } public static void main(String[] args) throws InterruptedException { final CountDownLatch latch = new CountDownLatch(100); for(int i=0;i<100;i++){ new Thread(new Runnable() {@Overridepublic void run() { Counter.inc(); latch.countDown();} }).start(); } latch.await(); System.out.println('運行結果:'+Counter.count); }}

運行結果: 100

4、使用普通Integer

public class Counter { public volatile static int count = 0; public static void inc(){ try{ Thread.sleep(1); //延遲1毫秒 }catch (InterruptedException e){ //catch住中斷異常,防止程序中斷 e.printStackTrace(); } count++;//count值自加1 } public static void main(String[] args) throws InterruptedException { final CountDownLatch latch = new CountDownLatch(100); for(int i=0;i<100;i++){ new Thread(new Runnable() {@Overridepublic void run() { Counter.inc(); latch.countDown();} }).start(); } latch.await(); System.out.println('運行結果:'+Counter.count); }}運行結果:98

5、如果在inc方法前面加個synchronized也能是線程安全的;

它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執行該段代碼。

import java.util.concurrent.CountDownLatch;/** * created by guanguan on 2017/10/23 **/public class Counter { public volatile static Integer count = 0; public synchronized static void inc(){ try{ Thread.sleep(1); //延遲1毫秒 }catch (InterruptedException e){ //catch住中斷異常,防止程序中斷 e.printStackTrace(); } count++;//count值自加1 } public static void main(String[] args) throws InterruptedException { final CountDownLatch latch = new CountDownLatch(100); for(int i=0;i<100;i++){ new Thread(new Runnable() {@Overridepublic void run() { Counter.inc(); latch.countDown();} }).start(); } latch.await(); System.out.println('運行結果:'+Counter.count); }}運行結果:100

synchronized的使用說明:

一、當兩個并發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。另一個線程必須等待當前線程執行完這個代碼塊以后才能執行該代碼塊。

二、然而,當一個線程訪問object的一個synchronized(this)同步代碼塊時,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。

三、尤其關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。

四、第三個例子同樣適用其它同步代碼塊。也就是說,當一個線程訪問object的一個synchronized(this)同步代碼塊時,它就獲得了這個object的對象鎖。結果,其它線程對該object對象所有同步代碼部分的訪問都被暫時阻塞。

五、以上規則對其它對象鎖同樣適用.

6、從上面的例子中我們可以看出:使用AtomicInteger是非常的安全的.而且因為AtomicInteger由硬件提供原子操作指令實現的。在非激烈競爭的情況下,開銷更小,速度更快。

java的關鍵域有3個

// setup to use Unsafe.compareAndSwapInt for updates private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long valueOffset; private volatile int value;

這里, unsafe是java提供的獲得對對象內存地址訪問的類,注釋已經清楚的寫出了,它的作用就是在更新操作時提供“比較并替換”的作用。實際上就是AtomicInteger中的一個工具。

valueOffset是用來記錄value本身在內存的便宜地址的,這個記錄,也主要是為了在更新操作在內存中找到value的位置,方便比較。

注意:value是用來存儲整數的時間變量,這里被聲明為volatile,就是為了保證在更新操作時,當前線程可以拿到value最新的值(并發環境下,value可能已經被其他線程更新了)。

這里,我們以自增的代碼為例,可以看到這個并發控制的核心算法:

源碼

public final int updateAndGet(IntUnaryOperator updateFunction) { int prev, next; do { prev = get(); next = updateFunction.applyAsInt(prev); } while (!compareAndSet(prev, next)); return next; }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
激情综合在线| 国产美女视频一区| 久久一区二区三区国产精品| 亚洲六月丁香色婷婷综合久久| 蜜桃av一区二区三区电影| 欧美 日韩 国产 一区| 精品视频1区2区| 亚洲欧洲日韩综合一区二区| 国产一区二区三区在线观看免费视频| 国产精品chinese| 欧美日韩国产高清一区二区三区| 国产精品欧美久久久久一区二区| 麻豆91精品视频| 91视频www| 美日韩在线观看| 久久久一区二区| 国产精品视频观看| 成人午夜电影小说| 一本久久综合亚洲鲁鲁五月天 | 91久久精品一区二区别| 欧美一二三在线| 日韩国产欧美在线观看| 日韩视频精品在线观看| 国产亚洲精品久| 国产综合亚洲精品一区二| 91精品欧美综合在线观看最新 | 国产在线精品二区| 日韩一区二区在线播放| 天堂久久久久va久久久久| 永久域名在线精品| 久久久午夜精品理论片中文字幕| 国产麻豆9l精品三级站| 玖玖国产精品视频| 国产精品久久久一区麻豆最新章节| 久久99国产精品成人| 99在线精品免费视频九九视| 久久精品人人爽人人爽| 久久www免费人成看片高清| 亚洲欧美视频在线观看| 色综合天天狠狠| 欧美一区二区三区在线视频| 偷拍一区二区三区四区| 亚洲一本视频| 久久久久久久久久美女| 国产成人精品www牛牛影视| 欧美日韩国产影片| 视频一区中文字幕| 国产精品三区www17con| 亚洲天堂免费在线观看视频| 91理论电影在线观看| 日韩欧美一区在线观看| 国产乱人伦精品一区二区在线观看| 色婷婷国产精品久久包臀| 亚洲免费av高清| 国内精品视频在线播放| 亚洲国产精华液网站w| 成人av在线资源网站| 日韩一区二区高清| 狠狠色狠狠色综合系列| 欧美日韩在线观看一区二区| 青青草国产成人99久久| 久久久久免费| 日韩精品乱码免费| 亚洲丝袜美腿综合| 欧美三级不卡| 国产欧美日韩另类一区| 91丨porny丨首页| 久久精品男人的天堂| 国产成人免费av在线| 91精品欧美综合在线观看最新| 黑人巨大精品欧美一区| 69堂国产成人免费视频| 国内精品久久久久影院色| 欧美精品自拍偷拍| 激情综合一区二区三区| 91精品综合久久久久久| 高清在线不卡av| 26uuu欧美| 91视频www| 中文字幕电影一区| 国产精品草草| 亚洲猫色日本管| 国产日韩一区| 亚洲成av人片在线| 美女日韩在线中文字幕| 日韩精品视频网站| 欧美在线影院一区二区| 奇米色一区二区三区四区| 欧美三级资源在线| 国产精品综合一区二区| 日韩精品中文字幕在线一区| 成人免费观看男女羞羞视频| 久久精品一区二区三区av| 欧美精品18| 国产精品成人免费精品自在线观看 | 狠狠色综合网站久久久久久久| 国产日韩欧美高清| 国产一区二区三区四区hd| 一区二区三区欧美在线观看| 一本色道久久综合狠狠躁的推荐 | 久久久综合激的五月天| 亚洲无线视频| 亚洲狠狠爱一区二区三区| 久久精品一区二区三区中文字幕| 久久精品国产亚洲a| 日韩一区二区在线看| 欧美一区二区在线| 亚洲蜜桃精久久久久久久| 日日欢夜夜爽一区| 久久久精品网| 亚洲免费av高清| 国产福利一区二区三区视频| 影音先锋久久久| 亚洲国产婷婷综合在线精品| 国产一区二区三区免费在线观看| 国产精品v亚洲精品v日韩精品| 免播放器亚洲| 国产精品女同一区二区三区| 国产成人激情av| 一区二区免费在线视频| 国产一区二区中文字幕免费看| 91精品国产91久久久久久最新毛片| 免费成人美女在线观看.| 亚洲视频久久| 91精品国产综合久久久久久久 | 欧美优质美女网站| 国产欧美日韩另类一区| 久久精品国产精品亚洲精品| 91福利国产成人精品照片| 欧美极品美女视频| 国产成人丝袜美腿| 一本色道亚洲精品aⅴ| 亚洲成人av一区二区三区| 色综合久久中文综合久久97| 成熟亚洲日本毛茸茸凸凹| 国产在线日韩| 欧美一级片免费看| 成人午夜大片免费观看| 91成人免费在线视频| 日韩电影免费一区| 亚洲激情偷拍| 亚洲欧美偷拍三级| 午夜在线视频一区二区区别| 欧美性xxxxxxxx| 国产一区二区三区视频在线播放| 夜久久久久久| 日韩毛片一二三区| av中文字幕不卡| 日韩一卡二卡三卡四卡| 日本欧洲一区二区| 性久久久久久| 亚洲电影一区二区三区| 亚洲裸体视频| 欧美aaaaaa午夜精品| 日韩欧美久久久| 亚洲无毛电影| 看电视剧不卡顿的网站| 精品成人一区二区三区| 亚洲国产激情| 久久99精品久久久久久动态图| 久久麻豆一区二区| 亚洲欧美精品| 国产精品一二三区| 亚洲欧洲av在线| 久久一区免费| 成人开心网精品视频| 亚洲另类在线视频| 欧美性videosxxxxx| 欧美日韩一区二区三区在线观看免| 午夜精品免费在线| 精品免费日韩av| 亚洲一区二区三区精品在线观看| 国产又粗又猛又爽又黄91精品| 国产精品久久毛片| 欧美一区二区人人喊爽| 国产日韩久久| 成人毛片在线观看| 亚洲午夜久久久久久久久久久 | 美女一区二区视频| 国产精品美女视频| 欧美日本一区二区在线观看| 一级成人国产| 欧美承认网站| 国产米奇在线777精品观看| 一区二区视频在线看| 国产天堂亚洲国产碰碰| 在线不卡a资源高清| 免费不卡亚洲欧美| 欧美精品一卡| 国产·精品毛片| 日本不卡一区二区三区| 亚洲视频 欧洲视频| 日韩欧美一级二级三级| 欧美亚洲视频| 伊人久久久大香线蕉综合直播| 懂色av一区二区在线播放| 麻豆国产精品视频| 丝袜美腿亚洲一区二区图片| ...xxx性欧美| 中文字幕一区三区|