思路: cpu多级缓存 - 伪共享 解决一致性 缓存锁MESI + 总线锁 缓存行填充 cpu指令乱序 演示demo 为什么乱序 - 好处 因为cpu比内存块太多,为了充分压榨cpu cpu内存屏障阻止乱序 sfence&lfence&mfence volatile实现 字节码层面 在access ...
分类:
其他好文 时间:
2020-07-15 01:02:42
阅读次数:
97
1.1定义 在Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽各个硬件平台和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。那么Java内存模型规定了哪些东西呢,它定义了程序中变量的访问规则,往大一点说是定义了程 ...
分类:
编程语言 时间:
2020-07-12 10:27:57
阅读次数:
57
直接上代码了。从一个功能摘取出来的,只保留了上传图片、附件的功能 1,上传图片按钮,样式需要调整。 <el-form :label-position="labelPosition" label-width="140px" :model="formLabelAlign" :rules="rules" ...
分类:
编程语言 时间:
2020-06-22 12:24:38
阅读次数:
61
简述 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果 定义模型的目标 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到 ...
分类:
编程语言 时间:
2020-06-11 00:50:57
阅读次数:
70
1、概述 1.1、JVM规范 试图 定义一种java内存模型(JMM) 来 屏蔽掉各种硬件和OS的内存访问差异,以 实现 让java程序在各种平台下都达到一致的并发效果; 1.2、JDK1.5后,JMM 已经成熟和完善; 2、主内存 与 工作内存 2.1、JMM 的主要目标: 定义 程序中各个变量的 ...
分类:
编程语言 时间:
2020-06-10 13:23:51
阅读次数:
55
Java 内存模型(JMM)规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存。 线程的工作内存中保存了该线程中用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。 不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作 ...
分类:
编程语言 时间:
2020-06-04 19:23:56
阅读次数:
72
JMM内存模型 JMM即Java内存模型(Java Memory Model)。可以理解为它是一种抽象出来的硬件存储模型的规范。 根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Me ...
分类:
其他好文 时间:
2020-05-26 10:32:42
阅读次数:
88
[TOC] 一、一段代码引发的思考 首选,看下面这段代码会输出什么结果? 我们在主线程休眠1s后将子线程用到的stop开关设为了true,这个时候子线程是不是应该停止while循环,输出i的最终结果呢? 运行结果: 最终结果是程序会在后台一直运行.. 这说明了我们在主线程中修改的内容对子线程是不可见 ...
分类:
编程语言 时间:
2020-05-22 14:26:58
阅读次数:
60
volatile :保证可见性,但保证不了原子性。 保证不了原子性,所以在遇到数据并发处理的情况无法保证数据不一致,线程不安全。 dcl:双重检锁机制 public class Singleton { private static Singleton singleton; private Singl ...
分类:
编程语言 时间:
2020-05-19 18:43:03
阅读次数:
68
1、引例 引用上一篇JMM中的开篇代码,再次针对性分析。 /** * 验证volatile原子性 */ public class AtomicityTest implements Runnable { volatile int i = 0; @Override public void run() { ...
分类:
编程语言 时间:
2020-05-17 01:25:44
阅读次数:
68