volatile 与 synchronized 关键字的区别?

简介: volatile 与 synchronized 关键字的区别?

(1)volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

(2)volatile仅能使用在变量级别synchronized则可以使用在变量、方法、和类级别的。

(3)volatile仅能实现变量的修改可见性,并不能保证原子性synchronized则可以保证变量的修改可见性和原子性。

(4)volatile不会造成线程的阻塞synchronized可能会造成线程的阻塞。

(5)volatile标记的变量不会被编译器优化synchronized标记的变量可以被编译器优化。

相关知识点参考:

volatile 的作用是什么?能保证原子性吗?能保证有序性吗?

线程两种加锁方式:synchronized 锁与 ReentrantLock 锁的区别

介绍一下 synchronized 关键字对于锁的一些优化?

如何保证线程安全?

相关文章
|
6月前
|
缓存 编译器 C语言
一起来探讨volatile关键字
在C语言中,volatile是一个关键字,用于告诉编译器不要对被声明为volatile的变量做优化,以确保每次对该变量的读写都直接操作内存。
|
安全 Java
【Synchronized关键字】
【Synchronized关键字】
|
3月前
|
安全 Java
synchronized关键字
在Java中,`synchronized`确保多线程安全访问共享资源。应用于实例方法时,锁绑定于对象实例,仅阻止同一对象的其他同步方法访问;应用于静态方法时,锁绑定于整个类,阻止该类所有同步静态方法的同时访问。实例方法锁作用于对象级别,而静态方法锁作用于类级别,后者影响所有对象实例。正确应用可避免并发问题,提升程序稳定性和性能。
|
6月前
|
安全 Java 程序员
synchronized关键字与ReentrantLock的区别和应用
synchronized关键字与ReentrantLock的区别和应用
38 0
|
缓存 安全 Java
Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
265 0
|
存储 安全 Java
synchronized关键字讲解
synchronized关键字讲解
synchronized关键字讲解
|
缓存 Java 编译器
深入理解synchronized关键字
synchronized关键字详解
88 0
|
算法 安全 Java
多线程之volatile关键字
多线程之volatile关键字
java多线程关键字volatile、lock、synchronized
volatile写和volatile读的内存语义: 1. 线程A写一个volatile变量,实质上是线程A向接下来将要读这个volatile变量的某个线程发出了(其对共享变量所在修改的)消息。 2. 线程B读一个volatile变量,实质上是线程B接收了之前某个线程发出的(在写这个volatile变量之前对共享变量所做修改的)消息。 3. 线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。
287 0
|
存储 安全 Java
深入理解synchronized关键字(二)
深入理解synchronized关键字(二)
129 0
深入理解synchronized关键字(二)