volatile 和cas

volatile

1、保证线程间变量的可见性
简单地说就是当线程A对变量X进行了修改后,在线程A后面执行的其他线程能看到变量X的变动,更详细地说是要符合以下两个规则:
a、线程对变量进行修改之后,要立刻回写到主内存。
b、线程对变量读取的时候,要从主内存中读,而不是缓存。
2、禁止指令重排(有例外)
什么是指令重排序?有两个层面:
在虚拟机层面,为了尽可能减少内存操作速度远慢于CPU运行速度所带来的CPU空置的影响,虚拟机会按照自己的一些规则(这规则后面再叙述)将程序编写顺序打乱——即写在后面的代码在时间顺序上可能会先执行,而写在前面的代码会后执行——以尽可能充分地利用CPU。拿上面的例子来说:假如不是a=1的操作,而是a=new byte1024*1024,那么它会运行地很慢,此时CPU是等待其执行结束呢,还是先执行下面那句flag=true呢?显然,先执行flag=true可以提前使用CPU,加快整体效率,当然这样的前提是不会产生错误(什么样的错误后面再说)。虽然这里有两种情况:后面的代码先于前面的代码开始执行;前面的代码先开始执行,但当效率较慢的时候,后面的代码开始执行并先于前面的代码执行结束。不管谁先开始,总之后面的代码在一些情况下存在先结束的可能。
在硬件层面,CPU会将接收到的一批指令按照其规则重排序,同样是基于CPU速度比缓存速度快的原因,和上一点的目的类似,只是硬件处理的话,每次只能在接收到的有限指令范围内重排序,而虚拟机可以在更大层面、更多指令范围内重排序。
3、弱一致性
每个CPU对自己可见的属性都会缓存一个在自己内部。当每次属性修改之后会马上写到主内存中,如果另外一个CPU在这个过程中也操作这个属性,那么就没有不会一致了

CAS(Compare and Swap,CPU指令)

1、 比较并交换
就是将内存值与预期值进行比较,如果相等才将新值替换到内存中,并返回true表示操作成功;如果不相等,则直接返回false表示操作失败。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VolatileCAS都是Java中用于实现多线程并发编程的技术。 Volatile是一种轻量级的同步机制,用于保证可见性和禁止指令重排序。当一个变量被声明为volatile时,每次对该变量的读写操作都会直接操作主内存,而不是从缓存中读取或写入。这样可以确保不同线程之间对该变量的操作是可见的,从而避免了由于线程间内存可见性问题而带来的线程安全问题。 CAS(compare and swap)是一种无锁的原子操作,它通过比较预期值和实际值来判断是否需要更新主内存中的值。当多个线程同时执行CAS操作时,只有一个线程能够成功,其他线程需要重试直到成功为止。CAS操作是通过硬件的原子指令来实现的,因此具有很高的效率。CAS操作可以确保线程之间对共享变量的更新是原子性的,从而避免了由于线程竞争而引起的数据不一致的问题。 VolatileCAS可以结合使用,来实现线程安全的操作。Volatile保证了可见性,确保了对共享变量的读写操作是立即可见的;而CAS保证了原子性,通过比较交换的方式保证了多个线程对共享变量的更新是安全的。当多个线程同时访问共享变量时,可以使用Volatile来保证可见性,使用CAS来保证原子性,从而实现线程安全。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java多线程(Synchronized+Volatile+JUC 并发工具原理+线程状态+CAS+线程池)](https://download.csdn.net/download/weixin_43516258/87937931)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [volatile + CAS](https://blog.csdn.net/weixin_51207423/article/details/123085930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值