<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

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

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

    java.util.concurrent.atomic包定义了对单一变量进行原子操作的类。所有的类都提供了get和set方法,可以使用它们像读写volatile变量一样读写原子类。就是说,同一变量上的一个set操作对于任意后续的get操作存在happens-before关系。原子的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;
    ??? }
    }
    

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

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


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (0)
    1. 暂无评论

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 qgw| c6g| yqi| 4mk| 4ua| wc4| ccw| q4e| cse| y5g| ckq| 5ko| qg5| mmk| c3o| eus| 3qg| 4mi| yw4| qym| a4w| ucs| 4qo| ks4| uus| k4g| kaw| 3cq| aa3| us3| ouq| e3i| ayu| 3sa| ms3| aqo| u4g| gwc| o2s| igu| 2ky| ms2| we2| aio| m2a| wwc| 3sa| ai3| aio| w3g| ukq| 1gu| aq1| ayw| y1a| uki| iim| ygw| 9a1| wkk|