java-AtomicInteger:getAndIncrement()的实现原理求解

问题描述

AtomicInteger:getAndIncrement()的实现原理求解
public final int getAndIncrement() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return current;
    }
}

public final boolean compareAndSet(int expect, int update) {
    return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

书上说:
源码中for循环体的第一步先取得AtomicInteger里存储的数值,第二步对AtomicInteger的当前数值进行加1操作,关键的第三步调用compareAndSet方法来进行原子更新操作,该操作先检查当前数值是否等于current,等于意味着AtomicInteger的值没有被其他线程修改过,则将AtomicInteger的当前数值更新成next的值,如果不等compareAndSet方法会返回false,程序会进入for循环重新进行compareAndSet操作。


我的疑问:
如果已经被其他线程修改过,此时再执行for()循环有什么意义呢?预期将3变成4,可谁知这时候被其他线程改成5了,不满足compareAndSet,此时重新进去for()循环又能怎么样呢?费解

解决方案

http://blog.csdn.net/zhangerqing/article/details/43057799

时间: 2024-12-10 19:05:02

java-AtomicInteger:getAndIncrement()的实现原理求解的相关文章

求问java 异步编程实现的原理是什么?我一直不明白它与回调的区别,求解,谢谢

问题描述 求问java 异步编程实现的原理是什么?我一直不明白它与回调的区别.假如我在执行某个任务的时候我再开启另外一个线程进行监听,这个与异步的实现有什么区别? 解决方案 应该这样理解同步是和异步进行比较的回调只是一种编程方法,让代码更加的优雅,回调是函数式编程的一种说法,相对于面向对像编程时,"回调"就变成"事件监听"这种说法了我们常说的同步回调,指的就是一个代码执行过程中,需要等到回调函数完全执行完后,才能往 下走.异步回调指的是一个代码执行到回调函数时,他可

Java序列化的机制和原理

有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍. Java 序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一种处理对象序列化的标准机制.在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的. 序列化的必要性

编译原理求解........................

问题描述 编译原理求解........................ 输入:if (a123>0.2){b2=b2+50;} 输出: <( 括号> < >= relop> <) 括号><{ 花括号> <= 赋值号> <+ op> <; 标点><} 花括号>

源码-请教关于java中jxl jar包原理

问题描述 请教关于java中jxl jar包原理 最近使用jxl操作excel,对其中源码有些疑问,表示看不懂,请问哪位大神指导源码中的Java代码是怎么操作Excel的? 解决方案 用pio吧,jxl不支持2010+的office文件 解决方案二: 楼主看看这些java书籍对你有没有用 http://download.csdn.net/album/detail/1191

图片-java面板设置问题,新手求解

问题描述 java面板设置问题,新手求解 如何设置点击这个按钮能呈现出图中的效果? 解决方案 Java新手问题汇总 解决方案二: 可以用java swing的消息弹出框. JOptionPane.showMessageDialog(null, "文字", "标题", JOptionPane.INFORMATION_MESSAGE); 解决方案三: 用变量记住你的几个值,比如姓名,然后为按钮添加点击事件(就是弹出那个对话框)把那个对话框里的值设置为你取到的变量的值.

短网址 网址-短网址服务的原理求解

问题描述 短网址服务的原理求解 网址缩短的原理很简单,但是,用过一些短网址会发现,当点击短网址之后,会跳转到另外一个页面(如果加过密,则跳转到提供短网址服务的网址输入密码才能访问原网页,否则直接跳转原网页),可是,dns解析的时候怎么能够解析到那个短网址呢?比如http://www.dwz.cn/cjssdassd 这是百度的一个短网址,点击的时候,访问的应该是 http://www.dwz.cn 下的 cjssdassd 文件,可是在http://www.dwz.cn 不应该存在cjssdas

编程-java web 初学者,遇到难题求解

问题描述 java web 初学者,遇到难题求解 在网上保存的htm页面,想改为jsp格式,我在htm页面代码上增加了<%@ page pageEncoding="utf-8"%>,然后在保存为jsp格式.在eclipse上打开,发现中文出现乱码,求问怎么解决 解决方案 在eclipse里,选中文件,右键,最下面的properties,修改文件编码. 解决方案二: <%@ page pageEncoding="utf-8"%>,utf-8修改

url-关于java的HTTPURLConnection的使用原理

问题描述 关于java的HTTPURLConnection的使用原理 一直对于http协议的请求原理不是很明白,于是做了如下测试 用ServerSocket做了一个服务端,接收请求,并获取输入流打印, 用HTTPURLConnertion向服务端发送请求, 第一次测试时,客户端只使用了输出流,并使用了flush().然后再close,结果服务端什么都没有输出 就报错了 第二次测试,客户端,即使用了输出流,又使用了输入流,然后再close,结果服务端,正常输出了 , 于是迷茫了,到底时怎么回事啊,

答案-编译原理求解,跪谢啦

问题描述 编译原理求解,跪谢啦 第二题第二小问