Java并发编程之CAS

40 篇文章 2 订阅

转自:

Java并发编程之CAS

CAS简介说明

CAS(Compare and swap):他是并发算法中用到的一种技术
即:比较和替换是使用一个期望值和一个变量的当前值进行比较
如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值

CAS的使用场景

在程序和算法中一个经常出现的模式就是“check and act”模式
先检查后操作模式发生在代码中首先检查一个变量的值
再基于这个值做一些操作
例:

class MyLock {
    private boolean locked = false;
    public boolean lock() {
        if(!locked) {
            locked = true;
            return true;
        }
        return false;
    }
}

注意事项:
    以上程序在多线程中运行时,会出现相应的异常
	如:线程1:运行 if(!locked) 
	    线程2:运行 if(!locked) 
		线程1:运行 locked = true;
        线程2:运行 locked = true;//此处发生错误,因为此时locaked已经为true
为了多线程程序更好的工作,
必须保证“check and act”是一个原子操作,
那么必须使用以下 synchronized 关键字使其为一个原子块

例:

class MyLock {
    private boolean locked = false;
    public synchronized boolean lock() {
        if(!locked) {
            locked = true;
            return true;
        }
        return false;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值