AtomicInteger学习笔记

AtomicInteger主要提供于在多线程并发中的原子操作。

在java中处理并发主要有两种方式:
1,synchronized关键字,这个大家应当都各种面试和笔试中经常遇到。
2,volatile修饰符的使用,相信这个修饰符大家平时在项目中使用的也不是很多。

这里重点说一下volatile:
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存重新读取该成员的值,而且,当成员变量值发生变化时,强迫将变化的值重新写入共享内存,这样两个不同的线程在访问同一个共享变量的值时,始终看到的是同一个值。

java语言规范指出:为了获取最佳的运行速度,允许线程保留共享变量的副本,当这个线程进入或者离开同步代码块时,才与共享成员变量进行比对,如果有变化再更新共享成员变量。这样当多个线程同时访问一个共享变量时,可能会存在值不同步的现象。而volatile这个值的作用就是告诉VM:对于这个成员变量不能保存它的副本,要直接与共享成员变量交互。

建议:当多个线程同时访问一个共享变量时,可以使用volatile,而当访问的变量已在synchronized代码块中时,不必使用。
缺点:使用volatile将使得VM优化失去作用,导致效率较低,所以要在必要的时候使用。

Java中运用AtomicIntegr的实例:ThreadLocal中的成员变量threadLocalHashCode的值得获取。

AtomicInteger:主要成员变量和成员方法

public class AtomicInteger extends Number implements java.io.Serializable {
    //可以序列化对象
    private static final long serialVersionUID = 6214790243416807050L;
    private static final Unsafe unsafe = Unsafe.getUnsafe();
    private static final long valueOffset;
    static {
      try {
        valueOffset = unsafe.objectFieldOffset
            (AtomicInteger.class.getDeclaredField("value"));
      } catch (Exception ex) { throw new Error(ex); }
    }

    private volatile int value;
    ```
    //set方法
    public final int get() {```}
    //get方法
    public final void set(int newValue) {```}
    //返回value = newValue
    public final int getAndSet(int newValue) {```}
    //返回value + delta
    public final int getAndAdd(int delta) {```}
    //返回value--
    public final int getAndDecrement() {```}
    //返回--value
    public final int decrementAndGet() {```}
    //value++
    public final int getAndIncrement() {```}
    //返回++value
    public final int incrementAndGet() {````}
    ```
}

Java中其他Atomic类:AtomicBoolean,AtomicInteger,AtomicIntegerArray,AtomicLong,AtomicReference等等。。

参考:http://haininghacker-foxmail-com.iteye.com/blog/1401346

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值