標籤:get highlight 加鎖 incr 賦值 cin 程式碼 並發 ref
J2SE 5.0提供了一組atomic class來協助我們簡化同步處理。基本工作原理是使用了同步synchronized的方法實現了對一個long, integer, 對象的增、減、賦值(更新)操作. 比 如對於++運算子AtomicInteger可以將它持有的integer 能夠atomic 地遞增。在需要訪問兩個或兩個以上 atomic變數的程式碼(或者是對單一的atomic變數執行兩個或兩個以上的操作)通常都需要被synchronize以便兩者的操作能夠被當作是 一個atomic的單元。
java多線程用法-使用AtomicInteger下面通過簡單的兩個例子的對比來看一下 AtomicInteger 的強大的功能
class Counter { private volatile int count = 0; public synchronized void increment() { count++; //若要安全執行緒執行執行count++,需要加鎖 } public int getCount() { return count; }}
class Counter { private AtomicInteger count = new AtomicInteger(); public void increment() { count.incrementAndGet(); } //使用AtomicInteger之後,不需要加鎖,也可以實現安全執行緒。 public int getCount() { return count.get(); }}
從上面的例子中我們可以看出:使用AtomicInteger是非常的安全的那麼為什麼不使用記數器自加呢,例如count++這樣的,因為這種計數是線程不安全的,高並發訪問時統計會有誤,而AtomicInteger為什麼能夠達到多而不亂,處理高並發應付自如呢?這是由硬體提供原子操作指令實現的。在非激烈競爭的情況下,開銷更小,速度更快。Java.util.concurrent中實現的原子操作類包括:AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。
[Android Pro] AtomicInteger的用法