Java中Volatile关键字如何深入理解?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1903个文字,预计阅读时间需要8分钟。
一、基本概念补充一下基本概念:Java + 内存模型中的可见性、原子性和有序性。
二、内存模型特性
1.可见性:可见性是一种复杂的属性,因为其中的错误通常都会违背我们的直观感受。通常,我们无法确保执行结果。
2. 原子性:原子性是保证操作不可分割的特性,即一个操作要么完全执行,要么完全不执行。
3. 有序性:有序性是指操作执行的顺序,包括程序顺序规则、先行发生规则和单线程规则。
一、基本概念
先补充一下概念:Java 内存模型中的可见性、原子性和有序性。
可见性:
可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。
可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个变量a具有可见性,但是a++ 依然是一个非原子操作,也就是这个操作同样存在线程安全问题。
在 Java 中 volatile、synchronized 和 final 实现可见性。
本文共计1903个文字,预计阅读时间需要8分钟。
一、基本概念补充一下基本概念:Java + 内存模型中的可见性、原子性和有序性。
二、内存模型特性
1.可见性:可见性是一种复杂的属性,因为其中的错误通常都会违背我们的直观感受。通常,我们无法确保执行结果。
2. 原子性:原子性是保证操作不可分割的特性,即一个操作要么完全执行,要么完全不执行。
3. 有序性:有序性是指操作执行的顺序,包括程序顺序规则、先行发生规则和单线程规则。
一、基本概念
先补充一下概念:Java 内存模型中的可见性、原子性和有序性。
可见性:
可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。
可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个变量a具有可见性,但是a++ 依然是一个非原子操作,也就是这个操作同样存在线程安全问题。
在 Java 中 volatile、synchronized 和 final 实现可见性。

