java 并发——volatile】的更多相关文章

Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存,多个线程对同一个变量读取时,会从主内存中把变量拷贝到自己的CPU缓存中,线程之间也无法直接访问对方CPU缓存内存中的变量,只能通过主内存传递变量的值: 举个例子.例一: int i=0; //线程一中执行 i=1; //线程二中执行 int j=0; j=i; 上面这个程序在线程一中,读取内存变量…
java 并发--volatile 介绍 维基百科: volatile 是一个类型修饰符(type specifier).volatile 的作用是确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 看了上面的话感觉不是那么的好理解,因为 volatile 关键字是和 java 内存模型 JMM(java memory model)是息息相关的,所以在介绍 volatile 之前我们先来看一下 java 内存模型. 内存模型概念 我们的程序执行指令是从 cpu 中执行的,程序执行肯定和数…
111 Java并发——volatile的原理…
volatile 修饰变量等于向编译器传达如下两层含义: 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的. 禁止进行指令重排序. volatile 关键字定义了读写发生的次序: 对一个变量(被 volatile 修饰的变量)的写操作先行发生于(happens before)后面对这个变量的读操作 1. 修饰标记量 //线程1 // boolean stop = false; ⇒ volatile boolean stop = false…
学过计算机组成原理的一定知道,为了解决内存速度跟不上CPU速度这个问题,在CPU的设计中加入了缓存机制,缓存的速度介于CPU和主存之间.在进行运算的时候,CPU将需要的数据映射一份在缓存中,然后直接操作位于缓存中的数据,操作完毕后再将缓存中的数据写回到主存.这在单线程环境中是没有任何问题的.但是在多线程环境中就大不同了. 假设现在有这样的一个场景:有两个线程thread1和thread2,他们都在操作位于主存上的一个数据int a=2(具体操作为读取a的值并执行一个自增操作).逻辑上正确的结果:…
一.volatile的实现原理 synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile就可以说是JVM提供的最轻量级的同步机制.JMM告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理.线程在工作内存进行操作后何时会写入主内存中?这个实际对普通变量没有规定的,而针对volatile修饰的变量给Java虚拟机特殊的约定,线程对volatile变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数…
volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以重获生机. volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情.由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用vola…
什么是内存可见性? 这里就要提一下JMM(Java内存模型).当线程在运行的时候,并不是直接直接修改电脑主内存中的变量的值.线程间通讯也不是直接把一个线程的变量的值传给另一个线程,让其刷新变量.下面是一副抽象的结构图. 线程A要想和线程B通信,其实是通过改变主内存中的共享变量的值.具体的工作原理就是,线程A不能直接修改主内存中的值,而是在主内存和线程A中需要一个缓存区(每个线程都有自己的一个缓冲区),再将共享变量的副本拷入缓冲区,在缓冲区里修改完之后再通过一些指令将副本改变的值刷新进主内存.这里…
volatile关键字的使用volatile关键字原理适合使用volatile关键字的情况当且仅当满足以下所有条件时,才==应该==使用volatile关键字:volatile关键字的作用volatile关键字volatile关键字所修饰的变量即volatile变量,这是Java所提供的一种稍弱的同步机制,用于确保对volatile变量的更新能够通知到其他的线程. 原理要理解volatile关键字的原理,需要先了解Java内存模型(JMM),在这里不做展开.对变量采用volatile关键字进行修…
CPU的内存模型如下:…