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锁内存可见性
主要介绍了Java Volatile 变量详解及使用方法的相关资料,需要的朋友可以参考下
主要介绍了java volatile关键字使用方法及注意事项的相关资料,当一个变量被声明为 volatile 后,java 内存模型确保所有使用该变量的线程能看到相同的、一致的值。,需要的朋友可以参考下
在本文里我们给大家分享的是关于java volatile关键字作用及使用场景的相关知识点内容,需要的朋友们学习下。
【Java面试题】volatile的作用
主要介绍了简单了解volatile关键字实现的原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了了解java volatile,volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。下面我们来一起学习一下吧
主要介绍了java volatile关键字的含义详解的相关资料,需要的朋友可以参考下
主要介绍了Java Volatile关键字实现原理过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在本文里我们给大家整理了一篇关于Java volatile的适用场景实例内容和知识点,需要的朋友们可以学习下。
主要介绍了Java Volatile关键字同步机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要讲述java线程volatile关键字
主要介绍了java 高并发中volatile的实现原理的相关资料,在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”,需要的朋友...
本篇文章给大家通过实例分享了Java中Volatile的作用,有兴趣的朋友可以学习参考下。
volatile这个关键字,不仅仅在Java语言中有,在很多语言中都有的,而且其用法和语义也都是不尽相同的。这篇文章主要介绍了Java中的volatile关键字,需要的朋友可以参考下