Java 内存模型(JMM)

2019-09-21  本文已影响0人  盼旺

简介

JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。
JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。
Java 语言的内存模型由一些规则组成,这些规则确定线程对内存的访问如何排序以及何时可以确保它们对线程是可见的。
JMM决定一个线程对共享变量的写入何时对另一个线程可见

线程之间的通信

线程之间的通信机制有两种共享内存消息传递
1.线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象(比如一个变量值)进行通信。
2.明确的发送消息来显式进行通信,在java中典型的消息传递方式就是wait()等待notify()唤醒

线程之间的同步

同步是指程序用于控制不同线程之间操作发生相对顺序谁先执行,该谁执行了的机制。

内存可见性


在现代可共享内存的多处理器体系结构中每个处理器都有自己的缓存,并周期性的与主内存协调一致。假设线程 A 写入一个变量值 V,随后另一个线程 B 读取变量 V 的值,在下列情况下,线程 B 读取的值可能不是线程 A 写入的最新值:

重排序

你无法预知不同线程之间的指令会以何种顺序执行。但是只要所有执行这些代码产生的结果,能够和内存模型预测的结果保持一致。就可以重排序

重排序类型包括:

Happens-before 关系

也就是线程执行顺序的关系
happens-before关系保证:
如果线程 A 与线程 B 满足 happens-before关系,则线程 A 执行动作的结果对于线程 B 是可见的。如果两个操作未按 happens-before 排序,JVM 将可以对他们任意重排序。

下面介绍几个happens-before 关系法则:

参考文章https://blog.csdn.net/suifeng3051/article/details/52611310

上一篇 下一篇

猜你喜欢

热点阅读