乐趣区

Java™ 教程(原子变量)

原子变量
java.util.concurrent.atomic 包定义了支持单个变量的原子操作的类,所有类都有 get 和 set 方法,类似于对 volatile 变量的读写操作,也就是说,set 与在同一个变量上任何后续的 get 具有先发生关系,compareAndSet 原子方法也具有这些内存一致性特性,适用于整数原子变量的简单原子算法也是如此。
要查看如何使用此包,让我们返回我们最初用于演示线程干扰的 Counter 类:
class Counter {
private int c = 0;

public void increment() {
c++;
}

public void decrement() {
c–;
}

public int value() {
return c;
}

}
使 Counter 免受线程干扰的一种方法是使其方法同步,如在 SynchronizedCounter 中:
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 中:
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();
}

}

上一篇:执行器

退出移动版