Volatile和Synchronized详解



VolatileSynchronized详解

知识准备:所有对基本类型的操作,除了某些long类型和double类型的操作之外,都必须是原子的,

一个java程序对应一个虚拟机实例

每一个虚拟机实例都有一个主存,用于保存所有的(对象的实例变量,数组的元素及类变量)每一个线程都有一个工作内存,因为它们每个线程是私有的。

管理低层线程行为的规则:

  1. 把变量的值从主存拷贝到它的工作内存

  2. 把它的值从工作内存写回到主存。

 

具体区别:

  1. Volatile修饰的变量具有可见性,也就是说一旦一个线程修改了被Volatile修饰的变量,则被修改的值会立即更新到主存。然后另一个线程基于这个值可以继续修改。

  2. Volatile只能修饰变量,不过在使用基本类型的变量作为共享变量时,最好使用并发包中的Atomic*等类修饰,而Synchronized不仅可以修饰变量,还可以修饰方法。

  3. Volatile不保证原子性,synchronized不仅保证可见性,还保证原子性。保证所有语句全部执行完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值