美文网首页
Volatile你应该知道的事

Volatile你应该知道的事

作者: jiagf | 来源:发表于2019-03-20 11:31 被阅读0次

写在前面

Volatile是Java虚拟机提供的最轻量的同步机制

概念

1.JAVA内存模型(JMM)

Java内存模型定义了线程和内存之间关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程以读 / 写共享变量的副本。本地内存是 JMM 的一个抽象概念,并不真实存在;它涵盖内存、缓存、寄存器以及其他的硬件和编译器优化

2.重排序

重排序是指编译器和处理器为了优化程序性能而对指令进行重排序的一种优化手段。

Java程序的几种重排序

编译器优化重排序:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。

指令级并行的重排序:如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。

内存系统的重排序:处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是在乱序执行

3.Volatile语义

a.及时,不论是线程A或者线程B操作,他们读到的值都是当下最新的内存值

b.禁止指令重排序

任何一个程序的执行顺序错误都会影响到代码逻辑

使用场景

1.线程中可以外部修改的,控制逻辑的关键变量

2.单例模式中的instance

3.部分静态变量,按需

相关文章

  • Volatile你应该知道的事

    写在前面 Volatile是Java虚拟机提供的最轻量的同步机制 概念 1.JAVA内存模型(JMM) Java内...

  • 你应该知道的volatile

    volatile的作用归结起来有两点: 1、保证内存可见性 2、防止指令重排序 但是要注意一点 保证double,...

  • Java 多线程原理

    ReentrantLock 实现原理 synchronized 关键字原理 你应该知道的 volatile 关键字...

  • volatile在i++情况下失效,volatile不是原子的

    概述 如果你对volatile不陌生的话,应该会知道volatile能够保证共享变量对线程的可见性。那为什么vol...

  • 你应该知道的 volatile 关键字

    前言 不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。 首先来看看为什么会出现这个关键字。 ...

  • 你应该知道的事

    明明完成不了,还执意要做,觉得是在节约时间,殊不知是最大化的浪费时间…… 很多人都喜欢那些看似虚,握则实的东西,而...

  • 你应该知道的事

    《我们都要好好的》背着大牌明星效应的光环,不负众望上映了。 更新到第二季的时候,粉丝的吐槽如漫天飞絮洋洋洒洒落了一...

  • Block你应该知道的事

    Block 是将函数及其执行上下文封装起来的对象(结构体)。Block的调用实质上就是函数的调用。----它的内存...

  • 牙齿 | 你应该知道的事!

    牙齿的定义: 人类牙齿是存在于口腔内、用于咀嚼食物的钙化组织。 人类有两组牙齿: 乳牙:人类在婴孩时期,约于6个月...

  • Android:自定义控件你应该知道的这些事_TypedArra

    Android:自定义控件你应该知道的这些事_TypedArrayAndroid:自定义控件你应该知道的这些事_事...

网友评论

      本文标题:Volatile你应该知道的事

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