第280天学习打卡(知识点回顾 volatile和synchronized的区别)

Posted doudoutj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第280天学习打卡(知识点回顾 volatile和synchronized的区别)相关的知识,希望对你有一定的参考价值。

知识点回顾

volatile 和synchronized的区别

  • volatile 是告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要去主内存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞
  • volatile仅能使用在变量级别;synchronized则可以使用在变量、方法和类级别
  • volatile仅能使用在变量的修改可见性,不保证原子性;synchronized可以使用在变量、方法和类级别
  • volatile不会造成线程阻塞;synchronized可能会造成线程阻塞
  • volatile 标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化
  • 仅使用volatile并不能保证线程安全;synchronized则可以实现线程的安全性,因为线程的安全取决于原子性和可见性

volatile:是java虚拟机提供的轻量级的同步机制

  • 保证可见性
  • 不保证原子性(就有可能出现写丢失的情况)
  • 禁止指令重排

synchronized 是关键字属于jvm层面

  • 不需要用户手动释放锁
  • 不可中断
  • 非公平
  • 不可以绑定多个条件Condition
  • 是可重入锁

https://www.bilibili.com/video/BV18b411M7xz?p=52&spm_id_from=pageDriver

以上是关于第280天学习打卡(知识点回顾 volatile和synchronized的区别)的主要内容,如果未能解决你的问题,请参考以下文章

第234天学习打卡(知识点回顾volatile 2 CAS)

第223天学习打卡(知识点回顾 volatile JMM)

第263天学习打卡(知识点回顾 springboot请求映射原理)

第304天学习打卡(知识点回顾 队列和栈)

第304天学习打卡(知识点回顾 队列和栈)

第304天学习打卡(知识点回顾 队列和栈)