第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

posted @ 2021-10-15 22:43  豆豆tj  阅读(31)  评论(0编辑  收藏  举报