生活随笔
收集整理的這篇文章主要介紹了
JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
轉(zhuǎn)載自?http://blog.csdn.net/bigtree_3721/article/details/51296064
JAVA 中無鎖的線程安全整數(shù) AtomicInteger,一個(gè)提供原子操作的Integer的類。在Java語言中,++i和i++操作并不是線程安全的,在使用的時(shí)候,
不可避免的會(huì)用到synchronized關(guān)鍵字。而AtomicInteger則通過一種線程安全的加減操作接口。AtomicInteger為什么能夠達(dá)到多而不亂,處理高并發(fā)應(yīng)付自如呢?
這是由硬件提供原子操作指令實(shí)現(xiàn)的,這里面用到了一種并發(fā)技術(shù):CAS。在非激烈競(jìng)爭(zhēng)的情況下,開銷更小,速度更快。 Java.util.concurrent中實(shí)現(xiàn)的原子操作類包括: AtomicBoolean、AtomicInteger、
AtomicIntegerArray、 AtomicLong、AtomicReference、
AtomicReferenceArray 。
/** ?* 來看AtomicInteger提供的接口。
?//獲取當(dāng)前的值 ? ?public final int get() ? ?//取當(dāng)前的值,并設(shè)置新的值 ? ? public final int getAndSet(int newValue) ? ?//獲取當(dāng)前的值,并自增 ? ? public final int getAndIncrement()? ? ?//獲取當(dāng)前的值,并自減 ? ?public final int getAndDecrement() ? ?//獲取當(dāng)前的值,并加上預(yù)期的值 ? ?public final int getAndAdd(int delta)?
例子代碼為:
AtomicOperationDemo.java
[java] ?view plaincopy print?
import ?java.util.*;?? import ?java.util.concurrent.*;?? import ?java.util.concurrent.atomic.*;?? ? ? ? ? ? ?? public ? class ?AtomicOperationDemo?{?? ???????static ?AtomicInteger?count= new ?AtomicInteger( 0 );?? ???????public ? static ? class ?AddThread? implements ?Runnable{?? ????????@Override ?? ????????public ? void ?run()?{?? ????????????for ( int ?k= 0 ;k< 1000 ;k++){?? ????????????????count.incrementAndGet();?? ????????????}?? ?????????}??? ???????}?? ???????public ? static ? void ?AtomicIntShow(){?? ?????????System.out.println("AtomicIntShow()?enter" );?? ?????????ExecutorService?threadpool?=???Executors.newFixedThreadPool(10 );?? ??????????? ?????????for ( int ?k= 0 ;k< 100 ;k++){?? ?????????????threadpool.submit(new ?AddThread());?? ?????????}?? ??????????? ?????????try ?{?? ????????????Thread.sleep(2000 );?? ????????}?catch ?(InterruptedException?e)?{?? ?????????????? ????????????e.printStackTrace();?? ????????}?? ??????????? ?????????? ? ? ? ?? ??????????? ?????????System.out.println("result?of?acumulated?sum=" +count);?? ?????????threadpool.shutdown();?? ?????????System.out.println("AtomicIntShow()?exit" );?? ?????????return ?;?? ?????????? ????}?? }??
Maintest.java
[java] ?view plaincopy print?
public ? class ?Maintest?{?? ????public ? static ? void ?main(String[]?args)?{?? ????????AtomicOperationDemo.AtomicIntShow();?? ????}?? }??
? ? ? ? ??
總結(jié)
以上是生活随笔 為你收集整理的JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。