java并发编程之内存模型(JMM)
学习java并发编程,首先要了解
java的内存模型(JMM)
,注意一定要和
JVM运行时的内存区域
相区别;
JMM是一组抽象的概念,并不是真实存在的,他描述的是一组规则或者规范;其实我们脑子里肯定会有一个问题;
那就是为什么要有JMM
?
用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量;
说了这么多,其实就是说,java对底层进行了重新的抽象,提供了一些易于使用的API,易于开发这使用,使用面向对象编程核心概念
抽象
理解;
可以利用JMM解释我们很多在并发编程中遇到的问题;
由于JVM运行程序的实体是线程,在每个线程创建时JVM都会为他们创建工作内存(栈空间),工作内存都是
私有数据区域
,而java的内存模型规定所有的变量都存储在主内存中,主内存是
共享的数据区域
,所有线程都可以访问,
但是线程对变量操作必须在工作内存中执行;首先将变量复制到自己的工作内存,对变量进行操作之后,在将变量写会主内存,不能直接操作主内存中的变量
,各个线程的工作内存中存放着主内存中共享变量副本拷贝,线程无法直接访问对方的工作内存,所以线程间的通信必须通过主内存来进行;