volatile 与 synchronized 关键字的区别?

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

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

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

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

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

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

相关知识点参考:

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

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

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

如何保证线程安全?

相关文章
|
7月前
|
安全 Java
【Synchronized关键字】
【Synchronized关键字】
|
4月前
|
安全 Java 程序员
synchronized关键字与ReentrantLock的区别和应用
synchronized关键字与ReentrantLock的区别和应用
21 0
|
11月前
|
缓存 安全 Java
Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
227 0
|
缓存 Java 编译器
深入理解synchronized关键字
synchronized关键字详解
64 0
|
存储 安全 Java
synchronized关键字讲解
synchronized关键字讲解
synchronized关键字讲解
|
算法 安全 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发送消息。
261 0
|
存储 安全 Java
深入理解synchronized关键字(二)
深入理解synchronized关键字(二)
107 0
深入理解synchronized关键字(二)
|
存储 缓存 安全
深入理解synchronized关键字(一)
深入理解synchronized关键字(一)
163 0
深入理解synchronized关键字(一)
|
Java 编译器
volatile与synchronized 区别
volatile与synchronized 区别