你真的了解 volatile 关键字吗?】的更多相关文章

volatile关键字经常在并发编程中使用,其特性是保证可见性以及有序性,但是关于volatile的使用仍然要小心,这需要明白volatile关键字的特性及实现的原理,这也是本篇文章的主要内容. 一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中. 每条线程中还有自己的工作内存,线程的工作内存中保存了被该线程所使用到的变量(这些变量是从主内存中拷贝而来).线程对变量的所有操作(读取,赋值)…
今天,让我们一起来探讨 Java 并发编程中的知识点:volatile 关键字 本文主要从以下三点讲解 volatile 关键字: volatile 关键字是什么? volatile 关键字能解决什么问题?使用场景是什么? volatile 关键字实现的原理? volatile 关键字是什么? 在 Sun 的 JDK 官方文档是这样形容 volatile 的: The Java programming language provides a secondmechanism, volatile f…
面:你怎样理解volatile关键字时? 我:不加思索的说出,volatile修饰的成员变量,可保证线程可见性.不保证原子性和禁止指令重排. 面:你能谈谈什么是线程可见性吗? 我:各个线程对主内存中共享变量的操作都是各个线程各自拷贝到自己的工作内存进行操作,操作完成后再写回主内存中的.例如一个线程AAA修改了共享变量X的值还未写回主内存中时 ,另外一个线程BBB又对 内存中的一个共享变量X进行操作,但此时A线程工作内存中共享变量X对线程B来说并不不可见.这种工作内存与主内存同步延迟现象就造成了可…
[摘要]编译器保证volatile自己的读写有序,但由于optimization和多线程可以和非volatile读写interleave,也就是不原子,也就是没有用.C++11 supposed会支持atomic operation. ---------------------------------------------^C^V的分割线---原帖在这里-------------------------------------------------------------- 这篇文章详细剖析…
对于volatile这个关键字,相信很多朋友都听说过,甚至使用过,这个关键字虽然字面上理解起来比较简单,但是要用好起来却不是一件容易的事.这篇文章将从多个方面来讲解volatile,让你对它更加理解. 计算机中为什么会出现线程不安全的问题 volatile既然是与线程安全有关的问题,那我们先来了解一下计算机在处理数据的过程中为什么会出现线程不安全的问题.大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中会涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存…
[Java并发编程(三)] Java volatile 关键字介绍 摘要 Java volatile 关键字是用来标记 Java 变量,并表示变量 "存储于主内存中" .更准确的说就是对于 volatile 变量的每次读操作都是从计算机的主内存中读取,而不是 CPU 缓存,每次写操作也是将 volatile 变量写入主内存中,不是 CPU 缓存. 事实上,因为 Java 5 的 volatile 关键字保证的不止是从主内存读写.这点稍后会进行解释. 正文 Java volatile 可…
目录 计算机系统的一致性 Java内存模型 内存模型的3个重要特征 原子性 可见性 有序性 指令重排序 volatile关键字 保证可见性和防止指令重排 不能保证原子性 计算机系统的一致性 在现代计算机操作系统中,多任务处理几乎是一项必备的功能,因为嵌入了多核处理器,计算机系统真正做到了同一时间执行若干个任务,是名副其实的多核系统.在多核系统中,为了提升CPU与内存的交互效率,一般都设置了一层 "高速缓存区" 作为内存与处理器之间的缓冲,使得CPU在运算的过程中直接从高速缓存区读取数据…
volatile关键字 volatile关键字是什么 在上一章我们讲到了并发的的三个概念,那么今天在讲解下在java中可以保证可见性和有序性的一个关键字. volatile关键字 :当变量的值被该关键字修饰后该值任何读写操作对于其他线程是立即可见的.并且被关键字修饰后的变量被禁止重排序. volatile原理解析 在定义中我们可以看到volatile关键字有2个特性,可见性和有序性,那么volatile是如何保证这个可见性和有序性的呢?那他为什么不能保证原子性呢? 首先volatile通过加入内…
前言 楼主这个标题其实有一种作死的味道,为什么呢,这三个东西其实可以分开为三篇文章来写,但是,楼主认为这三个东西又都是高度相关的,应当在一个知识点中.在一次学习中去理解这些东西.才能更好的理解 Java 内存模型和 volatile 关键字还有 HB 原则. 楼主今天就尝试着在一篇文章中讲述这三个问题,最后总结. 讲并发知识前必须复习的硬件知识. Java 内存模型到底是什么玩意? Java 内存模型定义了哪些东西? Java内存模型引出的 Happen-Before 原则是什么? Happen…
转载请标明出处: http://blog.csdn.net/forezp/article/details/77580491 本文出自方志朋的博客 Java内存模型 随着计算机的CPU的飞速发展,CPU的运算能力已经远远超出了从主内存(运行内存)中读取的数据的能力,为了解决这个问题,CPU厂商设计出了CPU内置高速缓存区.高速缓存区的加入使得CPU在运算的过程中直接从高速缓存区读取数据,在一定程度上解决了性能的问题.但也引起了另外一个问题,在CPU多核的情况下,每个处理器都有自己的缓存区,数据如何…