java内存模型

java多线程

Posted by zhenghao on 2019-04-12

java内存模型

今天说一下java内存模型,在说java内存模型的时候,我门提一下老生常谈的并发编程,以及并发编程到底是要解决什么问题。

并发编程解决的问题主要是两个问题:线程之间通信,以及线程的同步。

线程之间的通信有两种方式:一种是共享内存,另外一种是消息传递。Java并发编程采用的就是共享内存模型。

什么是java内存模型


Java 内存模型简称JMM,它决定了一个线程对共享变量的写入何时对另一个线程可见。抽象来说线程之间共享的变量存储在主内存中,每一个线程都有一个自己私有的本地内存,本地内存中存储了主内存的副本。本地内存是JMM抽象出来的,其实本身不存在。

006tNc79gy1fow7l9q3hsj30zi0rq41t

如上图:线程A和线程B共享内存变量,假设主要内存中有一个x的值为0.线程A执行的时候会把x的值加1,然后刷入到主内存中,然后线程B进行读取,这时候读取到X的值也为1.