JAVA高并发之volatile详解

volatile 介绍

1. 缓存的概念,为什么要有缓存?

在未采用缓存的之前,CPU都是直接访问主内存、虽然随着CPU制造工艺的提升,刷新频率的提高,内存受限于制造工艺和制造成本的限制,提升空间较小,导致了CPU与主线程访问频率过高,通过传统的FSB直接访问内存的方式会导致CPU资源受到很大的限制,为了降低CPU吞吐量,在CPU和主存中间加了缓存的设计。

2. 缓存运行方式以及缓存不一致性的问题

1: 在程序运行的时候,会将所需要的共享数据从主内存中拷贝一份放置缓存中,计算结束之后、在刷新之主内存中。
2:多个线程操作下,会出现缓存不一致的情况,所以现有解决办法是缓存一致性协议,如果当前变量为共享变量的话,只是读操作的话,不做任何处理,一旦涉及写操作、发出信号通知其他CPU将cache line设为无效,其他cpu在读取的时候,需要冲主内存中再次获取

3. java内存模型

1:共享变量都存储在主内存中、每个线程都可以访问。
2:每个线程都有私有的工作内存称之为本地内存
3:工作内存只存储共享变量的的副本
4: 线程不能直接操作主内存,先操作了工作内存之后在能再次写入主内存中,

4. 并发编程的特性

1:原子性 一个操作,要不全部成功,要不全部失败
2:可见性 一个线程修改共享变量、另外一个可见
3:有序性 有顺序的执行
原子性,单个赋值或者读取是原子性的,多个原子性聚合是非原子性的,例如x++,第一步,获取x的值为原子性操作,在、+1,然后在保存在主内存中
1:可见性
2:volatile ,syn,lock三种方式可以保证可见性,有序性.
3:volatile 在保证有序性的时候,直接禁止重排序

5. volatile 保证可见性

有volatile修饰的共享变量在进行写操作的时候会多出第二行汇编代码,一个.lock的前缀指令,.lock的指令在多核处理器中会引发两件事、
1:将当前缓存行重写至主内存中
2:写回主内存会使其他缓存中的共享变量置为失效

6. volatile 用法

修饰实例变量或者类变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值