概述

volatile是Java提供的轻量级的同步机制,保证了可见性,不保证原子性。
了解volatile工作机制,首先要对Java内存模型(JMM)有初步的认识:

  • 每个线程创建时,JVM会为其创建一份私有的工作内存(栈空间),不同线程的工作内存之间不能直接互相访问
  • JMM规定所有的变量都存在主内存,主内存是共享内存区域,所有线程都可以访问
  • 线程对变量进行读写,会从主内存拷贝一份副本到自己的工作内存,修改后立刻刷新到主内存。所以,线程间的通信要通过主内存来实现。
  • volatile的作用是:线程对副本变量进行修改后,其他线程能够立刻同步刷新最新的数值。这个就是可见性。

可见性验证

如下一段代码,number字段没有用volatile修饰。

  • 创建一个子线程
  • 子线程sleep 3s(目的是让主线程先加载number=0的变量)
  • 子线程把number改成100。
  • 这时主线程的number仍然为0,不会同步成100

Java进阶:volatile使用详解相关推荐

  1. Java进阶:AtomicReference详解

    前言 Atomic家族主要是保证多线程环境下的原子性,相比synchronized而言更加轻量级.比较常用的是AtomicInteger,作用是对Integer类型操作的封装,而AtomicRefer ...

  2. Java中Volatile关键字详解

    https://www.cnblogs.com/zhengbin/p/5654805.html 转载于:https://www.cnblogs.com/wangjing666/p/11301500.h ...

  3. Java进阶:@CallerSensitive详解

    前言 有一天在看Unsafe.getUnsafe()源码时,发现该方法上有一个@CallerSensitive注解.类似的,在Class.forName方法也有该注解.它们的源码分别如下: @Call ...

  4. java 可见性_Java并发编程-volatile可见性详解

    前言 要学习好Java的多线程,就一定得对volatile关键字的作用机制了熟于胸.最近博主看了大量关于volatile的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么 ...

  5. 你真的弄明白了吗?Java并发之AQS详解

    你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...

  6. Java 内存模型 JMM 详解

    转载自 Java 内存模型 JMM 详解 JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性.是否可以重排序等问题的无关具体 ...

  7. Java JUC学习 - ConcurrentLinkedDeque 详解

    Java JUC学习 - ConcurrentLinkedDeque 详解 0x00 前言 如何实现并发程序,对于Java以及其他高级语言来说都是一件并不容易的事情.在大一上学期的时候,我们学习了链表 ...

  8. Java内存模型(JMM)详解

    在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...

  9. Java 并发之 AQS 详解(上)

    Java 并发之 AQS 详解 前言 Java SDK 为什么要设计 Lock 死锁问题 synchronized 的局限性 显式锁 Lock Lock 使用范式 Lock 是怎样起到锁的作用呢? 队 ...

  10. 夯实JAVA基本之一 —— 泛型详解(1):基本使用

    前言:无论何时,相信自己. 相关文章: 1.<夯实JAVA基本之一 -- 泛型详解(1):基本使用> 2.<夯实JAVA基本之一--泛型详解(2):高级进阶> 3.<夯实 ...

最新文章

  1. 每日一皮:程序员穿着图解析
  2. 机器学习笔记(十三)半监督学习
  3. SAP Basis 应该做什么
  4. Spring Boot(三) 将war文件部署到tomcat 、 Thymeleaf示例
  5. 达内TTS6.0课件oop_day01
  6. 你觉得外观模式和代理模式的联系和区别是什么?_GoF23种设计模式
  7. 使用STS临时访问凭证访问OSS
  8. python的变量名可以是中文吗_Python中用中文变量名、函数名,会影响性能吗?
  9. 基于麻雀搜索算法优化的SVM回归预测 - 附代码
  10. 史上最详细的人脸识别和活体检测技术介绍、原理剖析及产品应用!
  11. FlowNet 2.0的阅读笔记
  12. 部门换届推文文字_宿委会换届表彰大会!!!
  13. 解决 python安装pip问题
  14. mysql按某个条件升序_问题描述大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例,下同):SELECT * FROM `MyTable` WHERE...
  15. SCHNOKA施努卡:3D视觉装配引导解决方案
  16. vector的find
  17. 米斯特吴小白系列教程 项目网址
  18. 用递归函数求解f的值
  19. Android性能调优 - 稳定性优化
  20. 【洛谷OJ】P1862—输油管道问题

热门文章

  1. sap 状态栏添加竖线
  2. SAP外币评估 fagl_fc_val 多评估与少评估问题
  3. ABAP EXCEL 上传 和下载 过程
  4. ABAP:DYNP_VALUES_READ读取屏幕字段值
  5. 79年后,中国人口将不到10亿,我国的生育率为何上不去了?
  6. 为什么美团打车、滴滴外卖必败?君智谢伟山揭秘了背后的竞争战略逻辑
  7. 三位数的茎叶图怎么看_霍山石斛哪家好?霍山石斛怎么选择?
  8. (格式化字符串漏洞).fini.array劫持,使程序流程循环进行
  9. python3 的 str bytes 区别
  10. Python实现Newton和lagrange插值