1、线程有自己的独立的内存 对于共享变量会从主内存复制一份到自己线程的内存
2、一个线程里修改了共享变量 两个线程里是看不到的
3、使用 volatile 修饰后 ,线程每次修改了 变量 会写到主内存,读取该变量时直接从主内存读取
4、volatile 解决了 线程间的可见性 但是不能保证原子性
5、测试对共享变量 i 使用两个线程各 i++ 5000次 会发现多数测试结果不是 10000
i++ 不是原子操作:实际是分为三步 从主内存读取、加1、写入主内存
线程1 从主内存 读取i=0 然后阻塞住
线程2 从主内存读取 i 这时读取到的是0 因为线程1阻塞了并没有修改i
线程1 把i+1 i在线程1中值为1
线程2 把i+1 i在线程2中值为1
线程1 把i=1 写入主内存
线程2 把i=1 写入主内存
最后结果 两个线程执行了2次 ++ 最后主内存的状态是 1
出现这种情况的根本原因就是 volatile 不能保证原子性
相关推荐
java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...
java volatile 关键字 学习
从JUC中的AQS引入,讲解Java volatile与AQS锁内存可见性
volatile
Java中的`volatile`关键字是用来修饰变量的,它主要用于解决多线程环境下的数据同步问题。在Java语言中,`volatile`变量提供了一种轻量级的同步机制,它确保了共享变量的可见性和有序性,但并不保证原子性。 **可见...
volatile关键字在Java编程语言中扮演着重要的角色,特别是在多线程环境下的同步和可见性问题。它是Java内存模型(JMM)的一部分,用于确保共享变量的可见性和有序性,但不保证原子性。 1. **volatile的可见性**:当...
Java中的`volatile`关键字是一个非常重要的并发编程工具,它的主要作用是确保共享变量在多线程环境下的可见性和有序性。下面将详细解释`volatile`的关键特性、它如何解决并发问题以及相关的`happens-before`原则。 ...
Java中的`volatile`关键字是用来解决多线程环境下的可见性和有序性问题的,它确保了共享变量在被修改后,其他线程能够立即看到最新的值,但并不保证操作的原子性。下面我们将深入探讨`volatile`关键字的原理、使用...
【Java面试题】volatile的作用
Java volatile的适用场景实例详解 Java volatile 关键字是 Java 并发编程中的一种重要机制,它提供了一种线程安全的方式来共享变量。volatile 变量具有 synchronized 的可见性特性,但是不具备原子性。这意味着线程...
Java Volatile 机制详解 Java 中的 volatile 关键字是一种轻量级的同步机制,在并发编程中扮演着重要的角色。了解 Java volatile 需要从内存模型基本概念开始。 内存模型基本概念 在计算机执行程序时,每条指令都...
Java Volatile关键字同步机制详解 Java Volatile关键字是Java语言中的一种同步机制,它可以保证在多线程环境下变量的可见性和原子性。通过使用Volatile关键字,可以确保在多线程环境下对变量的修改是可见的,并且...
在Java中,`volatile`关键字是用于解决并发问题的一个关键工具。它主要提供以下两个功能: 1. **可见性**:当一个线程修改了一个`volatile`变量时,这个修改会立即对其他所有线程可见。这意味着一旦一个线程修改了`...
Java 线程 volatile 关键字详解 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。volatile 变量的同步性较差,但它有时更简单并且开销更低。volatile 变量可以被看作是一种 “程度较轻的 ...
Java中的`volatile`关键字是并发编程中至关重要的一个特性,它用于解决多线程环境下的可见性和有序性问题。在Java内存模型(JMM)中,`volatile`关键字确保了共享变量在多线程间的正确通信。 首先,我们来看`...
Java中的`volatile`关键字是用来解决多线程并发访问共享变量时的可见性和有序性问题的。在Java中,每个线程都有自己的工作内存,用于存储从主内存中复制的变量副本。如果没有同步措施,线程间无法直接感知彼此对共享...
Java中的`volatile`关键字在高并发编程中扮演着至关重要的角色,它提供了一种轻量级的同步机制,用于确保共享变量在多线程环境下的可见性。与`synchronized`关键字相比,`volatile`通常具有更低的开销,但它并不提供...