当前位置:首页 > 开发 > 编程语言 > JDK JVM > 正文

原子变量 java.util.concurrent.atomic jdk 1.7

发表于: 2014-05-04   作者:abc08010051   来源:转载   浏览:
摘要:   在java并发包的一个子包中,提供了针对于基础类型的原子类型,熟悉并发的会知道,i++并不是一个原子操作,long longValue = 100l;也不是一个原子操作; 那么java.util.concurrent.atomic包中是如何实现对基础类型数据的原子操作的呢?   以AtomicLong类为例:   private volatile long

  在java并发包的一个子包中,提供了针对于基础类型的原子类型,熟悉并发的会知道,i++并不是一个原子操作,long longValue = 100l;也不是一个原子操作;

那么java.util.concurrent.atomic包中是如何实现对基础类型数据的原子操作的呢?

  以AtomicLong类为例:

 

private volatile long value;

 AtomicLong类有个成员变量value,声明为volatile的;也就是各个线程的共享变量,

   以getAndAdd方法来说明增加值是如何实现原子操作的:

    public final long getAndAdd(long delta) {
        while (true) {
            long current = get();//获取线程中最新的value
            long next = current + delta;//获取修改后的期望值
            if (compareAndSet(current, next))//判断value值是否被修改,如果被修改在while循环中循环改过程,如果未被修改,返回修改后的值
                return current;
        }
    }

    public final long getAndAdd(long delta) {
        while (true) {
            long current = get();
            long next = current + delta;
            if (compareAndSet(current, next))
                return current;
        }
    }

 上面这个方法的实现,就是一个CAS(lock-free)算法的一个实现,该算法在网上有很多详细的解释,大家可以详细的看一下!

 

原子变量 java.util.concurrent.atomic jdk 1.7

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
利用atomiclong作一个简单的web计数器的线程安全servelet: 还有一些其实实用方便的类: AtomicBoole
简述: 在ubuntu上安装jdk 1.7 tar包下载地址 http://pan.baidu.com/s/1c0sxW0g 64bit http://pan.b
转自:http://www.cnblogs.com/cynthiahuo/archive/2013/06/03/3115921.html JDK 1.7 基本概念和目录
转自:http://www.cnblogs.com/cynthiahuo/archive/2013/06/03/3115921.html JDK 1.7 基本概念和目录
转自:http://www.cnblogs.com/cynthiahuo/archive/2013/06/03/3115921.html JDK 1.7 基本概念和目录
本篇主要介绍在Redhat Linux(Red Hat Enterprise Linux Server release 5.7 (Tikanga))系统上安装
本篇主要介绍在Redhat Linux(Red Hat Enterprise Linux Server release 5.7 (Tikanga))系统上安装
JDK1.5(JDK5.0) Java2标准版(Java 2 Platform, Standard Edition, J2SE)1.5版本更新不同于以往,它
1 下载jdk 1.7 linux版本 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-download
这篇文章着重讲解tomcat7的安装,首先需要下载tomcat包和相应的jdk,如果你的系统是32位,那么下载x
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号