文档章节

谈谈CAS的常规用法

F
 FAT_mt
发布于 01/11 20:26
字数 368
阅读 11
收藏 0
CAS

CAS的核心操作是比较并交换,具体是假设当前内存位置V的值为A,如果给定的值确实为A那么将新值B设置到内存位置V上,最后总是返回内存位置原有的值。

这是一个典型的读-改-写的操作,并且是原子操作,那可以利用这个特性来构建无锁的线程安全操作。具体的步骤与CAS的核心操作是类似的,只是当CAS操作失败的时候会一直检查失败条件直至成功(注意:这里如果长时间不成功则会占用大量的CPU资源,一种情况就是在“谈谈原子变量与锁的性能比较”中提到的大量线程在激烈竞争的时候会导致更多的竞争)。以数值自增为例:

private static class MyAtomicInteger{
        AtomicInteger ai = new AtomicInteger(0);
        
        public int incrementAndGet(){
            while(true){
                int old =  ai.get();
                int newVal = old+1;
                if(ai.compareAndSet(old, newVal)){
                    return newVal;
                }
            }
        }
    }

虽然AtomicInteger自带该方法,但这里为了说明执行原理。

 

© 著作权归作者所有

共有 人打赏支持
F

FAT_mt

粉丝 1
博文 35
码字总数 20087
作品 3
南京
高级程序员
私信 提问
最新天猫3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/83689192 一面 自我介绍、项目介绍 Spring拦截器、实现了哪些方法?底层原...

JAVA高级架构v
2018/11/03
0
0
拼多多Java后端团队面试题:epoll+集群+事务隔离+Kafka+分布式等

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/86133163 一面 自我介绍 介绍一下mysql索引?为什么用B+树? 网络IO模型?...

JAVA高级架构v
01/09
0
0
开源单点登录框架CAS学习二 —— CAS的安装需求

安装需求 需求一览: java 1.7及以上 Servlet容器,例如TOMCAT,需要支持servlet规范2.5及以上 Apache Maven 3.3及以上 熟悉Spring Framework Internet网络连接 根据所选配置组件的不同,可能...

周宇YuZhou
2015/09/16
409
0
cas的入门了解第一章:识别cas的目录结构和名词以及一些基本的概念

概念:耶鲁大学的一个开源项目。JA-SIG 中央认证服务(Central Authentication Service简称CAS)是一个开源的企业级单点登录的java 服务器组件。客户端有多种语言实现,包括:PHP,PL/SQL,java,...

天使broken
2015/07/28
0
0
「深入 Exchange 2013」09 证书

今儿咱们来聊Exchange里的证书,CAS与MBX角色都有用到证书的地方,只是CAS角色更依赖证书一些,在一台Exchange服务器刚刚安装完成的时候,安装程序会自动生成一张自签名证书,这张自签名证书...

sodaxu
2015/07/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
33分钟前
2
0
IntelliJ IDEA 第一个 Scala 程序

IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。...

honeymose
37分钟前
2
0
mysql分表,分区的区别和联系

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同...

吴伟祥
39分钟前
1
0
csapp 习题 - 如何实现异或 exclusive-or

阅读 csapp v3 时,练习题 2.13 很有意思。练习题描述如下。 位设置是对于参数 mask 中每一个为 1 的位,那么参数 x 中相应位则被设置为 1 ;位清除是对于参数 mask 中每一个为 1 的位,那么...

ylme
昨天
5
0
Amino——产品迭代

兴趣部落产品迭代 时间 版本号 更新内容 备注 2019年1月2日 v3.1.1 支持定制部落首页的内容tab,酋长可以将精华、相册、分类添加到部落首页啦。 支持申请酋长,酋长可以直接推送优质话题,快...

铸剑为犁413
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部