Java中Volatile关键字如何深入理解?

2026-05-26 04:450阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1903个文字,预计阅读时间需要8分钟。

Java中Volatile关键字如何深入理解?

一、基本概念补充一下基本概念:Java + 内存模型中的可见性、原子性和有序性。

二、内存模型特性

1.可见性:可见性是一种复杂的属性,因为其中的错误通常都会违背我们的直观感受。通常,我们无法确保执行结果。

2. 原子性:原子性是保证操作不可分割的特性,即一个操作要么完全执行,要么完全不执行。

3. 有序性:有序性是指操作执行的顺序,包括程序顺序规则、先行发生规则和单线程规则。

一、基本概念

先补充一下概念:Java 内存模型中的可见性、原子性和有序性。

可见性:

  可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。

  可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个变量a具有可见性,但是a++ 依然是一个非原子操作,也就是这个操作同样存在线程安全问题。

  在 Java 中 volatile、synchronized 和 final 实现可见性。

阅读全文

本文共计1903个文字,预计阅读时间需要8分钟。

Java中Volatile关键字如何深入理解?

一、基本概念补充一下基本概念:Java + 内存模型中的可见性、原子性和有序性。

二、内存模型特性

1.可见性:可见性是一种复杂的属性,因为其中的错误通常都会违背我们的直观感受。通常,我们无法确保执行结果。

2. 原子性:原子性是保证操作不可分割的特性,即一个操作要么完全执行,要么完全不执行。

3. 有序性:有序性是指操作执行的顺序,包括程序顺序规则、先行发生规则和单线程规则。

一、基本概念

先补充一下概念:Java 内存模型中的可见性、原子性和有序性。

可见性:

  可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。

  可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个变量a具有可见性,但是a++ 依然是一个非原子操作,也就是这个操作同样存在线程安全问题。

  在 Java 中 volatile、synchronized 和 final 实现可见性。

阅读全文