J2SE 5.0提供了一組atomic class來幫助我們簡(jiǎn)化同步處理。基本工作原理是使用了同步synchronized的方法實(shí)現(xiàn)了對(duì)一個(gè)long, integer, 對(duì)象的增、減、賦值(更新)操作. 比如對(duì)于++運(yùn)算符AtomicInteger可以將它持有的integer 能夠atomic 地遞增。在需要訪問兩個(gè)或兩個(gè)以上 atomic變量的程序代碼(或者是對(duì)單一的atomic變量執(zhí)行兩個(gè)或兩個(gè)以上的操作)通常都需要被synchronize以便兩者的操作能夠被當(dāng)作是一個(gè)atomic的單元。
java多線程用法-使用AtomicInteger
下面通過簡(jiǎn)單的兩個(gè)例子的對(duì)比來看一下 AtomicInteger 的強(qiáng)大的功能
class Counter {
private volatile int count = 0;
public synchronized void increment() {
count++; //若要線程安全執(zhí)行執(zhí)行count++,需要加鎖
}
public int getCount() {
return count;
}
}
class Counter {
private AtomicInteger count = new AtomicInteger();
public void increment() {
count.incrementAndGet();
}
//使用AtomicInteger之后,不需要加鎖,也可以實(shí)現(xiàn)線程安全。
public int getCount() {
return count.get();
}
}
從上面的例子中我們可以看出:使用AtomicInteger是非常的安全的
那么為什么不使用記數(shù)器自加呢,例如count++這樣的,因?yàn)檫@種計(jì)數(shù)是線程不安全的,高并發(fā)訪問時(shí)統(tǒng)計(jì)會(huì)有誤,而AtomicInteger為什么能夠達(dá)到多而不亂,處理高并發(fā)應(yīng)付自如呢?
這是由硬件提供原子操作指令實(shí)現(xiàn)的。在非激烈競(jìng)爭(zhēng)的情況下,開銷更小,速度更快。Java.util.concurrent中實(shí)現(xiàn)的原子操作類包括:
AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。
posted on 2015-01-28 16:50
Terry Zou 閱讀(168)
評(píng)論(0) 編輯 收藏 所屬分類:
Android