volatile 与 synchronized 关键字的区别?

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

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

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

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

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

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

相关知识点参考:

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

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

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

如何保证线程安全?

相关文章
|
10月前
|
安全 Java 程序员
synchronized关键字与ReentrantLock的区别和应用
synchronized关键字与ReentrantLock的区别和应用
53 0
|
10月前
|
Java 编译器
Java多线程:什么是volatile关键字?
Java多线程:什么是volatile关键字?
67 0
|
存储 安全 Java
synchronized关键字讲解
synchronized关键字讲解
synchronized关键字讲解
|
算法 安全 Java
多线程之volatile关键字
多线程之volatile关键字
|
存储 缓存 安全
深入理解synchronized关键字(一)
深入理解synchronized关键字(一)
239 0
深入理解synchronized关键字(一)
|
存储 安全 Java
深入理解synchronized关键字(二)
深入理解synchronized关键字(二)
147 0
深入理解synchronized关键字(二)
java多线程关键字volatile、lock、synchronized
volatile写和volatile读的内存语义: 1. 线程A写一个volatile变量,实质上是线程A向接下来将要读这个volatile变量的某个线程发出了(其对共享变量所在修改的)消息。 2. 线程B读一个volatile变量,实质上是线程B接收了之前某个线程发出的(在写这个volatile变量之前对共享变量所做修改的)消息。 3. 线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。
328 0
|
存储 缓存 安全
Java并发:volatile关键字详解
volatile关键字可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、完整地理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一律使用synchronized来进行同步。了解volatile变量的语义对了解多线程操作的其他特性很有意义,在本文中我们将介绍volatile的语义到底是什么。由于volatile关键字与Java内存模型(Java Memory Model,JMM)有较多的关联,因此在介绍volatile关键字前我们会先介绍下Java内存模型。
178 0
Java并发:volatile关键字详解
|
Java 编译器
volatile与synchronized 区别
volatile与synchronized 区别
158 0