获得徽章 0
- CAS 其实非常简单,它是 CompareAndSwap 的缩写,是乐观锁思想的一种实现。 Java Unsafe 类中的 compareAndSwapXXX 方法一般有 4 个参数:
1、要进行 CAS 字段所在对象在内存中的起始地址(一般就是 this )。
2、要进行 CAS 字段相对于对象起始地址(this)的偏移量。
3、期望的值。
4、新的值。
前两个参数确定字段地址,再将内存地址中保存的值与期望值进行比较,相等就将字段值设置成新的值,并返回 true。否则返回 false。
参考 Java Unsafe 很容易写出使用乐观锁的方式修改 MySQL 表中某条记录的值:
update table set value= 10 where id = 1 and value = 8;
其中 id = 1 指定记录地址,value = 8 指定期望的值,value = 10 指定新的值。成功会返回 1 失败返回 0。失败可以采用自旋的方式进行重试,伪代码如下:
count = 10; //自旋的次数
while(count-- > 0) {
select value from table where id = 记录地址; //获取期待的值
int affect = update table set value = 新的值 where id = 记录地址 and value = 期待的值;
if (affect > 0) {
break;
}
}展开评论3 - 473
- 【2018年6月份GitHub上最热门的Java项目】
www.itcodemonkey.com
6 月份 GitHub 上最热门的 Java 项目排行已经出炉啦,在本月的名单中,也有新面孔出现,如唯品会 Java 开发手册,下面是排名前三的项目:
- Java-Interview GitHub 地址:github.com
此项目为 Java 面试的汇总,多数是一些 Java 基础知识、底层原理、算法详解。也有上层应用设计,其中不乏一些大厂面试真题。
- vjtools GitHub 地址:github.com
唯品会Java开发手册,结合唯品会的内部经验,参考《阿里巴巴Java开发手册》《Clean Code》、《Effective Java》等重磅资料进行了大幅定制,包含核心基础类库VJKit ,问题排查工具VJMap 和 VJTop 三部分。
- proxyee-down GitHub 地址:github.com
proxyee-down 是一个开源的下载神器,也可以说是百度云神器,不过,它需要安装证书、设置代理,初次使用会略显繁琐,但带来的速度提升也是显而易见的。展开评论31