volatile和synchronized的区别

volatile

volatile的作用

  • 保证线程可见性(堆内存中)
    • MESI(缓存一致性协议)CPU级缓存一致性
  • 禁止指令重排(CPU)

synchronized 底层实现

  • 早期synchronized是重量级锁,需要去系统申请锁,效率非常低
  • JavaSE1.6之后引入 偏向锁–》自旋锁–》重量级锁
    • 偏向锁:只有一个线程访问的时候给object对象头上markword记录这个线程,内部实现的时候只记录的线程ID
    • 执行时间短、线程数少可以用自旋锁
    • 执行时间长、线程数多可以用重量级锁

volatile和synchronized区别

  1. volatile 是变量修饰符,使一个变量在多线程间可见;synchronized是可以修饰类、方法、变量、代码块。
  2. volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞
  3. volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值