Java原子变量


在 java.util.concurrent.atomic包下的类,在单个变量操作是支持原子操作的。其中的类有get和set方法和volatile

变量的read和write方法一样,然而,一个set方法和随后的get方法在操作同一个变量的时候有一种happens-before关系
原子的compareAndSet方法保证了内存的一致性的特性,然而在做一些简单的算术操作应用于integer原子变量。

看一些这个包是怎么使用的,使用原始的方法来干扰线程



class Counter {
    private int c = 0;

    public void increment() {
        c++;
    }

    public void decrement() {
        c--;
    }

    public int value() {
        return c;
    }

}
一种方式可以是Counter类多线程使用时变安全,就是使用synchronized来同步方法,也是在同步计数器中
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();
    }
}

原文地址:http://docs.oracle.com/javase/tutorial/essential/concurrency/atomicvars.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值