4.volatile关键字

1.说说java内存模型,内存模型的变化带来了什么问题,怎么解决这个问题?
2.说说synchronized关键字和volatile关键字的区别


Q:说说java内存模型,内存模型的变化带来了什么问题,怎么解决这个问题?
A:
在jdk1.2前线程如果想修改主内存中变量的值是可以直接修改的
但是现在jdk的内存模型是:
如果线程想修改主内存中变量的值,需要先把它读到线程自己的工作内存中,然后在工作内存中进行变量的修改,然后把修改后的变量再写回主内存中。

内存模型的变化带了数据的不一致性问题。当主内存中的一个变量被一个线程修改后,另一个线程还以为这个变量是之前自己工作内存中的值,这样就出现了数据的不一致性问题。

可以在变量前加上volatile关键字,来保证该变量在主内存对其它线程的可见性。
当变量加上volatile关键字后,说明该变量是不稳定的(volatile),以后读取和写入该变量都变成直接的方式,不经过工作内存。

volatile关键字加在变量上,作用1是保证该变量在主内存对其它线程的可见性,作用2是可以禁止指令重排序。

Q:说说synchronized关键字和volatile关键字的区别
A:
解决的问题不同 可见性和原子性保证的不同 阻塞性不同 作用范围不同 性能不同

volatile主要用来保证变量对于不同线程的可见性。
synchronized主要用来保证线程同步。

volatile只能保证可见性,但不能保证原子性。而synchronized都能保证。

多个线程访问volatile修饰的变量不会阻塞,但是synchronized会阻塞。

volatile作用在变量上,synchronized作用在方法和代码块上。

volatile为轻量级的,性能比synchronized要好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值