日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Java AtomicInteger類使用方法實例講解

瀏覽:172日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美一区二区三区高清视频| 国产精品一页| 免费日韩av| 成人污污视频| 日本免费一区二区视频| 成人av三级| 麻豆高清免费国产一区| 欧美亚洲三区| 日本免费在线视频不卡一不卡二| 国产亚洲综合精品| 在线视频亚洲| 亚洲色图网站| 日本三级亚洲精品| 国产精品白丝一区二区三区| 久久精品国产99国产| 91青青国产在线观看精品| 秋霞影视一区二区三区| 亚洲国产一区二区三区在线播放| 亚洲我射av| 国产一区二区久久久久| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 久久激情五月婷婷| 久久国产日韩欧美精品| 久久精品99国产精品日本| 国产精品三级| 麻豆国产精品| 久久久久国产| 日韩亚洲在线| 伊人精品久久| 91福利精品在线观看| 日韩精品一区二区三区免费视频 | 偷拍精品精品一区二区三区| 成人精品亚洲| 宅男在线一区| 日韩av网站免费在线| 国产精品一区二区精品视频观看| 136国产福利精品导航网址| 综合激情一区| 久久免费影院| 激情婷婷欧美| 国产日韩一区二区三区在线播放| 天堂8中文在线最新版在线| 99在线精品免费视频九九视| 日本不卡在线视频| 国产日韩一区二区三区在线播放| 日韩88av| 久久亚洲影院| 91av亚洲| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 欧美日韩视频网站| 免费一区二区视频| 欧美国产美女| 欧美aa一级| 亚洲精品乱码| 欧美好骚综合网| 在线一区免费| 久久精品国产免费| 久久不射网站| 国产精品毛片久久久| 中文国产一区| 亚洲成av人片一区二区密柚| 美女久久网站| 日本美女一区| 国产精品亚洲四区在线观看| 视频在线观看91| 激情久久久久久| 欧美13videosex性极品| av资源中文在线| 国产精品激情| 国产模特精品视频久久久久| 国产99亚洲| 久久激情婷婷| 国产美女高潮在线| 久久久久九九精品影院| 深夜福利一区| 亚洲色图国产| 在线精品一区| 日韩影院在线观看| 亚洲精品日本| 天堂成人国产精品一区| 国产精品美女久久久| 欧美成人午夜| 亚洲va久久| 亚洲乱码视频| 99久久视频| 1024精品一区二区三区| 神马午夜在线视频| 日韩欧美综合| 久久久一二三| 欧美香蕉视频| 久久免费国产| 亚洲激情二区| 亚洲精品在线a| 亚洲精品日本| 免费在线观看一区| 加勒比视频一区| 成人精品久久| 在线日韩中文| 欧美综合国产| 日本欧美在线看| 午夜欧美精品久久久久久久| 亚洲综合中文| 精品国产欧美| 在线视频免费在线观看一区二区| 日av在线不卡| 国产成人精品亚洲线观看| 亚洲香蕉网站| 国产日产精品_国产精品毛片 | 久久久久久久久久久妇女| 久久一区二区三区喷水| 亚洲成人三区| 日韩影院在线观看| 久久99青青| 婷婷综合亚洲| 国产精品传媒麻豆hd| 国产综合视频| 日本成人在线不卡视频| 日韩国产一区二区三区| 天使萌一区二区三区免费观看| 欧美日韩视频免费看| 色网在线免费观看| 久久福利影视| 国产精品a级| 天堂成人国产精品一区| 一区二区三区四区日本视频| 美女久久99| 男女精品网站| 亚洲一级少妇| 国产精品一区二区中文字幕| 欧美专区18| 久久婷婷av| 日韩精品国产欧美| 国产二区精品| 欧美日韩在线播放视频| 成人精品亚洲| 91久久国产| 伊人久久婷婷| 午夜在线视频观看日韩17c| 蜜桃视频一区二区| 国产精品欧美在线观看| 水蜜桃久久夜色精品一区| 久久中文字幕av一区二区不卡| 欧美aa国产视频| 在线一区免费观看| 麻豆成人综合网| 影音国产精品| 久久精品国产亚洲aⅴ| 久久视频精品| 天堂精品久久久久| 一区二区精品伦理...| 亚洲欧美网站| 国产精品成久久久久| 久久亚洲成人| 国产精品久久久免费| 1024精品久久久久久久久| 久久国产精品色av免费看| 中文不卡在线| 国产一区二区中文| 精品三级久久久| 日韩欧美精品一区二区综合视频| 日韩综合精品| 97精品久久| 99日韩精品| 久久精品国产www456c0m| 国产不卡一区| 精品久久91| 福利一区二区三区视频在线观看| 欧美日韩四区| 蜜桃视频在线网站| 91综合视频| 神马午夜久久| 亚洲深夜视频| 久久亚洲黄色| 国产精品扒开腿做爽爽爽软件| 中文字幕一区日韩精品| 亚洲天堂黄色| av亚洲一区二区三区| 丁香婷婷久久| 国产精品嫩草影院在线看| 日本欧美在线看| 日韩午夜在线| 婷婷精品进入| 婷婷综合亚洲| 午夜久久福利| 在线一区免费| 成人污污视频| 成人久久一区| 在线一区欧美| 亚洲男人在线| 国产亚洲精品精品国产亚洲综合| 日韩高清不卡一区| 国产探花一区| 国产aⅴ精品一区二区三区久久 | 日韩午夜高潮| 欧美69视频| 欧美精品黄色| 日韩av成人高清| 香蕉成人av| 日本成人精品| 欧美日韩尤物久久|