美文网首页
volatile的浅层理解

volatile的浅层理解

作者: 正居明阳 | 来源:发表于2018-07-20 21:23 被阅读0次

对共享变量

对于内存可见性需要从指令的层级来理解,

就是一个线程对一个共享变量的写操作是要分好多个指令来执行的,还不是原子的,会插入这个线程中其他指令,

所以两个线程如果对同一个变量操作没加同一个锁,那么,另一个读线程读到的还是缓存数据,再用这个缓存数据更新到主存,两个线程的更新就覆盖了,出现数据不一致的问题

一种办法,就是两个线程在处理同一个变量时,竞争同一把锁,一个线程更新完了,释放了锁,这时同步到主存的所有指令都完成了,这点很关键!!!!

然后另一个线程拿到锁,再处理,就不会数据不一致了

如果变量时volatile修饰,那么只要一个线程修改了,别的线程一定会立刻得到同步,

但是这个不解决两个不加锁的线程会同时得到这个变量的值,基于这个值做计算后,都更新还是会有数据不一致的问题

所以volatile只适合一个线程更新了,另一个线程能立刻得到!单例模式里double check,一个对象创建了另一个能立马知道,另一点就是对象创建是分三个指令的,如果不加volatile就会指令重排,导致即使不是null了,但是还没调用构造函数

另一个适合的场景是glag标记位的问题,防止指令重排,同时做到内存可见,?

不解决对共享数据操作的原子性问题,需要靠锁

相关文章

  • volatile的浅层理解

    对共享变量 对于内存可见性需要从指令的层级来理解, 就是一个线程对一个共享变量的写操作是要分好多个指令来执行的,还...

  • Volatile理解

    Java Volatile1. volatile 理解2. volatile 不保证原子性3. Volatile ...

  • 谈谈对Volatile的理解

    谈谈对Volatile的理解 带着BAT大厂的面试问题去理解volatile volatile关键字的作用是什么?...

  • 多线程5:彻底理解volatile

    彻底理解volatile

  • 死磕Java——volatile的理解

    一、死磕Java——volatile的理解 1.1.JMM内存模型 理解volatile的相关知识前,先简单的认识...

  • 死磕Java——volatile的理解

    一、死磕Java——volatile的理解 1.1.JMM内存模型 理解volatile的相关知识前,先简单的认识...

  • 希望是volatile的最后一次理解

    第一次理解: 刚学java时,对于volatile的记忆就是: volatile保证可见性 volatile防止指...

  • volatile的理解

    volatile的理解 首先上代码 运行这段代码,把jvm设置为server模式,主线程在启动子线程后,休眠1s,...

  • volatile的理解

    1.简介 volatile作为java中的关键词之一,用以声明变量的值可能随时会别的线程修改,使用volatile...

  • volatile 的理解

    文章目录 前言 通过一系列的问题,了解volatile 总结 前言 在面试的时候,经常会遇到多线程的问题,然后面试...

网友评论

      本文标题:volatile的浅层理解

      本文链接:https://www.haomeiwen.com/subject/baxcmftx.html