Oracle官方并发教程之原子变量

原文地址译文地址 ,译者:李任,校对:郑旭东

java.util.concurrent.atomic包定义了对单一变量进行原子操作的类。所有的类都提供了get和set方法,可以使用它们像读写volatile变量一样读写原子类。就是说,同一变量上的一个set操作对于任意后续的get操作存在happens-before关系。原子的compareAndSet方法也有内存一致性特点,就像应用到整型原子变量中的简单原子算法。

为了看看这个包如何使用,让我们返回到最初用于演示线程干扰的Counter类:
[code lang=”java”]
class Counter {
private int c = 0;
public void increment() {
c++;
}

public void decrement() {
c–;
}

public int value() {
return c;
}
}
[/code]
使用同步是一种使Counter类变得线程安全的方法,如SynchronizedCounter
[code lang=”java”]
class SynchronizedCounter {
    private int c = 0;
    public synchronized void increment() {
        c++;
    }
    public synchronized void decrement() {
        c–;
    }
    public synchronized int value() {
        return c;
    }
}
[/code]
对于这个简单的类,同步是一种可接受的解决方案。但是对于更复杂的类,我们可能想要避免不必要同步所带来的活跃度影响。将int替换为AtomicInteger允许我们在不进行同步的情况下阻止线程干扰,如AtomicCounter
[code lang=”java”]
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();
    }
[/code]

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Oracle官方并发教程之原子变量

  • Trackback 关闭
  • 评论 (0)
  1. 暂无评论

return top