JSR133Java内存模型总结

Java的并发采用的是共享内存模型,线程之间共享程序的公共状态,线程之间通过读写内存的公共状态来隐式的进行通信。

           注意:多线程之间的通信是通过共享变量来实现,并不是直接的数据交换完成。

 

1. Java内存模型

Java线程之间的通信是由java内存模型控制。JMM决定一个线程对共享变量的写入何时对另一个线程可见。

从抽象的角度看,JMM定义了线程和主内存之间的抽象关系。

线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程可以读写的共享变量的副本。

本地内存是JMM的一个抽象的概念,实际上并不存在的,它涵盖了缓存,写缓存,寄存器以及其他硬件和编译器优化。

Java内存模型如下图:

 

 

线程之间的通信步骤:

1.线程A改变本地内存中的值,然后刷新到主内存中,此时主内存中的值改变

2.线程B读取主内存中的值到本地内存中

经过两部完成了线程A和线程B的通信。这里可以看出,线程间的通讯是通过共享变量来完成并不是单纯的值传递完成。

 

通讯的步骤的图如下:

 

 

从整体来看,这两个步骤实质上是线程A在向线程B发送消息,而且这个通信过程必须要经过主内存。JMM通过控制主内存与每个线程的本地内存之间的交互,来为java程序员提供内存可见性保证。

 

2三个概念:

         1.可见性:指的是当一个线程修改了主内存中值是其他的线程可以访问到修改后的值

         2.有序性:保证线程的顺序执行,比如银行存款的典型例子,若没有线程的有序性,那么会导致数据的不一致性。

   3.原子性:

 

 

展开阅读全文

没有更多推荐了,返回首页