并发中的变量可见性问题

并发的线程能不能看到变量的最新值,这就是并发中的变量可见性问题

方式一 synchronized

1.进入同步块,先清空工作内存中的共享变量,从
主内存中重新加载
2.解锁前必须把修改的共享变量同步回主内存

方式二 volatile

volatile可用于限制局部代码指令重排序

1.使用volatile变量时,必须重新从主内存加载,并且read,load是连续的
2.修改volatile变量后,必须立马同步回主内存,并且store write是连续的

使用场景:
1.只可修饰成员变量
2.多线程并发下,才需要使用它

volatile典型的应用场景
1.只有一个修改者,多个使用者,要求保证可见性的场景
1.状态

方式三 final

静态属性放在方法区 堆

线程是在栈中

共享变量必须存放在主内存中

线程有自己的工作内存

JAVA内存模型 同步交换协议 规定了8种原子操作
1.lock
2.unlock
3.read
4.load 载入
5.use 使用
6.assign 赋值
7.store 存储
8.write 写入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值