Java™ 教程(原子變量)

原子變量

java.util.concurrent.atomic包定義了支持單個變量的原子操做的類,全部類都有getset方法,相似於對volatile變量的讀寫操做,也就是說,set與在同一個變量上任何後續的get具備先發生關係,compareAndSet原子方法也具備這些內存一致性特性,適用於整數原子變量的簡單原子算法也是如此。html

要查看如何使用此包,讓咱們返回咱們最初用於演示線程干擾的Counter類:java

class Counter {
    private int c = 0;

    public void increment() {
        c++;
    }

    public void decrement() {
        c--;
    }

    public int value() {
        return c;
    }

}

使Counter免受線程干擾的一種方法是使其方法同步,如在SynchronizedCounter中:c++

class SynchronizedCounter {
    private int c = 0;

    public synchronized void increment() {
        c++;
    }

    public synchronized void decrement() {
        c--;
    }

    public synchronized int value() {
        return c;
    }

}

對於這個簡單的類,同步是可接受的解決方案,可是對於更復雜的類,咱們可能但願避免沒必要要的同步對活性的影響,用AtomicInteger替換int字段容許咱們在不使用同步的狀況下防止線程干擾,如在AtomicCounter中:git

import java.util.concurrent.atomic.AtomicInteger;

class AtomicCounter {
    private AtomicInteger c = new AtomicInteger(0);

    public void increment() {
        c.incrementAndGet();
    }

    public void decrement() {
        c.decrementAndGet();
    }

    public int value() {
        return c.get();
    }

}

上一篇:執行器

下一篇:配置實用程序

相關文章
相關標籤/搜索