synchronized 和 volatile 的区别是什么?(高薪常问)

简介: synchronized 和 volatile 的区别是什么?(高薪常问)

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

目录
打赏
0
1
2
0
1
分享
相关文章
剑指JUC原理-5.synchronized底层原理(上)
剑指JUC原理-5.synchronized底层原理
81 0
剑指JUC原理-5.synchronized底层原理(下)
剑指JUC原理-5.synchronized底层原理
68 0
|
6月前
|
Java多线程同步大揭秘:synchronized与Lock的终极对决!
Java多线程同步大揭秘:synchronized与Lock的终极对决!
114 5
面试题:再谈Synchronized实现原理!
面试题:再谈Synchronized实现原理!
面试官:说说volatile应用和实现原理?
面试官:说说volatile应用和实现原理?
65 1
惊呆了!Java多线程里的“synchronized”竟然这么神奇!
【6月更文挑战第20天】Java的`synchronized`关键字是解决线程安全的关键,它确保同一时间只有一个线程访问同步代码。在案例中,`Counter`类的`increment`方法如果不加同步,可能会导致竞态条件。通过使用`synchronized`方法或语句块,可以防止这种情况,确保线程安全。虽然同步会带来性能影响,但它是构建并发应用的重要工具,平衡同步与性能是使用时需考虑的。了解并恰当使用`synchronized`,能有效应对多线程挑战。
24 1
一文弄懂synchronized
一文弄懂synchronized
103 0
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
633 0
线程安全问题(面试常考)
线程安全问题(面试常考)
118 0
线程安全问题(面试常考)
说一下 synchronized 底层实现原理?(高薪常问)
说一下 synchronized 底层实现原理?(高薪常问)
135 2

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等