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

    xiaoxiao2024-03-20  125

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

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

    为了看看这个包如何使用,让我们返回到最初用于演示线程干扰的Counter类:

    01 class Counter { 02     private int c = 0; 03     public void increment() { 04         c++; 05     } 06  07     public void decrement() { 08         c--; 09     } 10  11     public int value() { 12         return c; 13     } 14}

    使用同步是一种使Counter类变得线程安全的方法,如SynchronizedCounter:

    01 class SynchronizedCounter { 02     private int c = 0; 03     public synchronized void increment() { 04         c++; 05     } 06     public synchronized void decrement() { 07         c--; 08     } 09     public synchronized int value() { 10         return c; 11     } 12}

    对于这个简单的类,同步是一种可接受的解决方案。但是对于更复杂的类,我们可能想要避免不必要同步所带来的活跃度影响。将int替换为AtomicInteger允许我们在不进行同步的情况下阻止线程干扰,如AtomicCounter:

    查看源代码 打印 帮助 01 import java.util.concurrent.atomic.AtomicInteger; 02 class AtomicCounter { 03     private AtomicInteger c = new AtomicInteger(0); 04     public void increment() { 05         c.incrementAndGet(); 06     } 07  08     public void decrement() { 09         c.decrementAndGet(); 10     } 11  12     public int value() { 13         return c.get(); 14     } 文章转自  并发编程网-ifeve.com 相关资源:敏捷开发V1.0.pptx
    最新回复(0)