这篇文章主要讲解了“JAVA中哪些地方用到CAS”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA中哪些地方用到CAS”吧!CAS 全称compareAndSet,比较并交换的意思,CAS为无锁操作(其实就是CPU级别的锁,跟操作系统没关系,而且CPU级别的锁比较快)。顾名思义CAS操作分为两步,先比较后交换。既然要进行比较然后在进行交换,那肯定是涉及到了三个参数,自己V、和谁进行比较 E、比较完之后需要修改成谁 U。V即为需要进行比较的参数,E为变量在内存中的最新值,U为需要修改的值。CAS在接收到三个参数后,先对V和E进行比较,如果V=E证明变量V没有被其他线程修改过,CAS就会把V替换成U;如V != E 证明这个变量已经被其他线程修改了,所以CVS认为本次操作是一次无效操作,不会进行任何操作。上面代码中,第一步是定义了一个原子性的整数类型atomicInteger,它的值为10;第二步对这个value进行CAS操作,因为AtomicInteger对CAS进行了封装,V永远是AtomicInteger内部的value,所以第二步的CAS少了V这个参数,CAS拿到atomicInteger变量的value和传进去的第一个参数进行比较,通过比较发现value = 10 这个条件是成立的,于是就把第二个参数11替换成了原来的10(整个第二步是原子性操作),并且返回一个boolean类型的操作成功true;第三步CAS又拿着自己的value 11(因为在第二步已经替换成为11了)和第一个参数 10 进行比较,通过比较发现11 != 10 条件不成立,于是不进行任何操作,并且返回一个boolean类型的操作失败 false。目前CAS在jdk中主要应用在J.U.C相关包下的Atomic相关类中,主要有AtomicInteger、AtomicLong、AtomicBoolean、AtomicDouble、AtomicReference、AtomicReferenceFieldU 香港云主机pdater等。以AtomicInteger类下的getAndUpdate为例 :第一步:首先通过get()方法获取到当前对象的value。第二步:updateFunction为函数引用,不过他的操作也是为了赋值,并返回预期结果。第三步:进行CAS操作,传入第一步get()获取到的值和目前对象中的值进行比较,如果一样就修改为next,不一样就继续循环,直到CAS操作返回true为止。第四步:返回当前获取到的值prev。感谢各位的阅读,以上就是“JAVA中哪些地方用到CAS”的内容了,经过本文的学习后,相信大家对JAVA中哪些地方用到CAS这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是开发云,小编将为大家推送更多相关知识点的文章,欢迎关注!
默认端口官方网站hadoop.apache.org查询官方文档登陆官网 —>选择版本—>选择左边大标题选择相关文档http://hadoop.apache.org/ —–> 选择Documentation —-> Re…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。