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

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

Java AtomicInteger類使用方法實例講解

瀏覽:175日期: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| 首页国产欧美久久| 蜜臀久久99精品久久一区二区| 精品99在线| 在线手机中文字幕| 日韩av首页| 精品在线播放| 免费久久99精品国产自在现线| 亚洲综合五月| 国产欧美日韩一级| 欧美成人aaa| 国内精品亚洲| 精品日韩视频| 亚洲婷婷免费| 模特精品在线| 蜜臀av一区二区三区| 日韩精品视频网站| 欧美日本精品| 福利在线免费视频| 国产91一区| 在线亚洲成人| 日韩精品国产欧美| 久久亚洲国产精品尤物| 少妇精品导航| 色8久久久久| 免费在线成人| 伊人久久大香线蕉av不卡| 99视频精品免费观看| 亚洲精品国模| 国产福利91精品一区二区| 亚洲不卡av不卡一区二区| 免费观看久久久4p| 欧美国产日本| 免费精品国产的网站免费观看| 亚洲深深色噜噜狠狠爱网站| 国产欧美一级| 99精品在线| 色综合视频一区二区三区日韩 | 欧美日韩国产在线一区| 美女精品在线| 麻豆精品视频在线观看视频| 激情自拍一区| 欧美精品影院| 久久青草久久| 国产欧美日韩一级| 99视频精品全部免费在线视频| 在线精品福利| 福利一区和二区| 国产视频一区免费看| 国产精品久久乐| 久久亚洲专区| 欧美亚洲二区| 亚洲精品电影| 激情不卡一区二区三区视频在线| 国产亚洲午夜| 久久久久久亚洲精品美女| 国产色综合网| 中文字幕人成乱码在线观看| 日欧美一区二区| 久久久久久美女精品| 国产日韩一区二区三区在线播放| 久久人人99| 国产精久久久| 丝瓜av网站精品一区二区| 粉嫩av一区二区三区四区五区 | 日本精品在线中文字幕| 日韩激情一区二区| 国产在线欧美| 国产精品免费精品自在线观看| 国产在线成人| 精品高清久久| 91亚洲无吗| 亚洲精品午夜av福利久久蜜桃| 国产精东传媒成人av电影| 国产精品免费看| 成人污污视频| 亚洲精品伦理| 精品一区毛片| 国产福利片在线观看| 青青国产91久久久久久| 快播电影网址老女人久久| 青青国产精品| 美女黄网久久| 久久中文字幕av一区二区不卡| 久久精品一本| 欧美天堂在线| 视频一区国产视频| 久久精品播放| 国产v日韩v欧美v| 日韩成人一级| 亚洲网址在线观看| 亚洲精品在线观看91| 91综合网人人| 国产精品一区二区三区av麻| 国产免费成人| 亚洲91久久| 黑人精品一区| 国产aⅴ精品一区二区三区久久| 国产精品白丝一区二区三区| 日韩综合一区二区三区| 视频一区中文字幕| 国产精品普通话对白| 亚洲午夜久久久久久尤物| 精品中文字幕一区二区三区四区| 国产亚洲高清在线观看| 日韩影片在线观看| 亚洲精品日韩久久| 日韩三区四区| 日本不卡不码高清免费观看 | 亚洲精品123区| 成人看片网站| 日韩欧美综合| 日韩国产激情| 日韩国产一区二区三区| 国产精品福利在线观看播放| 久久香蕉网站| 久久久久久婷| 成人va天堂| 欧美色图一区| 五月综合激情| 激情欧美丁香| 精品一区亚洲| 亚洲少妇自拍| 亚洲精品乱码久久久久久蜜桃麻豆| 天堂成人免费av电影一区| 国产亚洲永久域名| 日韩制服丝袜先锋影音| 亚洲一区亚洲| 日韩制服丝袜av| 日韩中文一区二区| 国产美女视频一区二区| 欧美国产日本| 亚洲最新无码中文字幕久久 | 日韩精品免费一区二区三区| 日韩电影免费网址| 久久高清免费| 羞羞答答国产精品www一本| 中文在线一区| 亚洲精品伊人| 欧美激情日韩| 日韩免费一区| 欧洲激情综合| 蜜臀久久99精品久久久画质超高清| 亚洲精品欧美| 久久不卡国产精品一区二区| 国产中文字幕一区二区三区| 亚洲成人va| 久久成人精品| 欧美日韩一区二区国产| 欧美黑人做爰爽爽爽| 黑人精品一区| 在线一区免费| 日本不卡在线视频| 国产成人免费| 91九色精品| 日本视频一区二区| 亚洲欧美日韩高清在线| 国产乱码精品一区二区亚洲| 首页亚洲欧美制服丝腿| 日韩精品欧美大片| 欧美激情视频一区二区三区在线播放| 日韩一区二区三区免费播放| 国产女优一区| 另类欧美日韩国产在线| 99香蕉国产精品偷在线观看 | 免费av一区| 国产精品高颜值在线观看| 免费日韩一区二区三区| 欧美亚洲tv| 色婷婷成人网| 日韩在线a电影| 老司机久久99久久精品播放免费| 国产精品毛片久久久| 国产精品欧美在线观看| 你懂的亚洲视频| 欧美日一区二区| 日韩av午夜在线观看| 四季av一区二区凹凸精品| 91精品推荐| 欧美中文高清| 久久久久国产一区二区| 日本一不卡视频| 欧美激情国产在线| 福利在线免费视频| 国产精品高清一区二区| 久久久久一区| 久久精品 人人爱| 久久精选视频| 国产精品乱战久久久| 99久久激情| 国产日本精品| 在线精品小视频| 久久久亚洲欧洲日产| 午夜国产精品视频免费体验区| 欧美精品国产一区| 欧美日韩第一| 国产一区二区三区不卡视频网站| 蜜臀精品一区二区三区在线观看 | 精品国产免费人成网站|