Java进阶:volatile使用详解
概述
volatile是Java提供的轻量级的同步机制,保证了可见性,不保证原子性。
了解volatile工作机制,首先要对Java内存模型(JMM)有初步的认识:
- 每个线程创建时,JVM会为其创建一份私有的工作内存(栈空间),不同线程的工作内存之间不能直接互相访问
- JMM规定所有的变量都存在主内存,主内存是共享内存区域,所有线程都可以访问
- 线程对变量进行读写,会从主内存拷贝一份副本到自己的工作内存,修改后立刻刷新到主内存。所以,线程间的通信要通过主内存来实现。
- volatile的作用是:线程对副本变量进行修改后,其他线程能够立刻同步刷新最新的数值。这个就是可见性。
可见性验证
如下一段代码,number字段没有用volatile修饰。
- 创建一个子线程
- 子线程sleep 3s(目的是让主线程先加载number=0的变量)
- 子线程把number改成100。
- 这时主线程的number仍然为0,不会同步成100
Java进阶:volatile使用详解相关推荐
- Java进阶:AtomicReference详解
前言 Atomic家族主要是保证多线程环境下的原子性,相比synchronized而言更加轻量级.比较常用的是AtomicInteger,作用是对Integer类型操作的封装,而AtomicRefer ...
- Java中Volatile关键字详解
https://www.cnblogs.com/zhengbin/p/5654805.html 转载于:https://www.cnblogs.com/wangjing666/p/11301500.h ...
- Java进阶:@CallerSensitive详解
前言 有一天在看Unsafe.getUnsafe()源码时,发现该方法上有一个@CallerSensitive注解.类似的,在Class.forName方法也有该注解.它们的源码分别如下: @Call ...
- java 可见性_Java并发编程-volatile可见性详解
前言 要学习好Java的多线程,就一定得对volatile关键字的作用机制了熟于胸.最近博主看了大量关于volatile的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么 ...
- 你真的弄明白了吗?Java并发之AQS详解
你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...
- Java 内存模型 JMM 详解
转载自 Java 内存模型 JMM 详解 JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性.是否可以重排序等问题的无关具体 ...
- Java JUC学习 - ConcurrentLinkedDeque 详解
Java JUC学习 - ConcurrentLinkedDeque 详解 0x00 前言 如何实现并发程序,对于Java以及其他高级语言来说都是一件并不容易的事情.在大一上学期的时候,我们学习了链表 ...
- Java内存模型(JMM)详解
在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...
- Java 并发之 AQS 详解(上)
Java 并发之 AQS 详解 前言 Java SDK 为什么要设计 Lock 死锁问题 synchronized 的局限性 显式锁 Lock Lock 使用范式 Lock 是怎样起到锁的作用呢? 队 ...
- 夯实JAVA基本之一 —— 泛型详解(1):基本使用
前言:无论何时,相信自己. 相关文章: 1.<夯实JAVA基本之一 -- 泛型详解(1):基本使用> 2.<夯实JAVA基本之一--泛型详解(2):高级进阶> 3.<夯实 ...
最新文章
- 每日一皮:程序员穿着图解析
- 机器学习笔记(十三)半监督学习
- SAP Basis 应该做什么
- Spring Boot(三) 将war文件部署到tomcat 、 Thymeleaf示例
- 达内TTS6.0课件oop_day01
- 你觉得外观模式和代理模式的联系和区别是什么?_GoF23种设计模式
- 使用STS临时访问凭证访问OSS
- python的变量名可以是中文吗_Python中用中文变量名、函数名,会影响性能吗?
- 基于麻雀搜索算法优化的SVM回归预测 - 附代码
- 史上最详细的人脸识别和活体检测技术介绍、原理剖析及产品应用!
- FlowNet 2.0的阅读笔记
- 部门换届推文文字_宿委会换届表彰大会!!!
- 解决 python安装pip问题
- mysql按某个条件升序_问题描述大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例,下同):SELECT * FROM `MyTable` WHERE...
- SCHNOKA施努卡:3D视觉装配引导解决方案
- vector的find
- 米斯特吴小白系列教程 项目网址
- 用递归函数求解f的值
- Android性能调优 - 稳定性优化
- 【洛谷OJ】P1862—输油管道问题
热门文章
- sap 状态栏添加竖线
- SAP外币评估 fagl_fc_val 多评估与少评估问题
- ABAP EXCEL 上传 和下载 过程
- ABAP:DYNP_VALUES_READ读取屏幕字段值
- 79年后,中国人口将不到10亿,我国的生育率为何上不去了?
- 为什么美团打车、滴滴外卖必败?君智谢伟山揭秘了背后的竞争战略逻辑
- 三位数的茎叶图怎么看_霍山石斛哪家好?霍山石斛怎么选择?
- (格式化字符串漏洞).fini.array劫持,使程序流程循环进行
- python3 的 str bytes 区别
- Python实现Newton和lagrange插值