Java内存模型的基础
并发编程模型的两个关键问题:
- 线程之间如何通信。
- 线程之间如何同步。
命令式编程中线程通信机制:
并发模型 | 程序的公共状态 | 通信方式 |
---|---|---|
共享内存 | 共享 | 隐式 |
消息传递 | 无 | 显示 |
同步是指程序中用于控制不同线程间操作发生相对顺序的机制。
并发模型 | 状态 | 方式 |
---|---|---|
共享内存 | 显式 | 显式指定某个方法或某段代码需要在线程之间互斥执行 |
消息传递 | 隐式 | 消息的发送必须在接收之前的属性决定的 |
java的并发采用的是共享内存模型,线程之间的通信是隐式的,整个通信过程对程序员完全透明。
Java内存模型的抽象结构
在Java中,所有实例域、静态域和数组元素都存储在堆内存中,线程间共享,称为“共享变量”。
局部变量(Local Variables)、方法定义参数(Formal Method Parameters)和异常处理器参数(Exception Handler Parameters)不会在线程间共享,它们不会有内存可见性问题,也不受JMM影响。