JAVA并发编程之JAVA内存模型(JMM)
JAVA并发编程之JAVA内存模型(JMM)
相关概念
进程和线程的区别与联系
进程是资源分配的最小单位,线程是程序执行的最小单位,服务器上的每一个应用都是一个进程,例如我们电脑的应用程序。
进程与进程间的通信
- 管道pipe
- 命名管道FIFO
- 消息队列MessageQueue
- 共享存储SharedMemory
- 信号量Semaphore
- 套接字Socket
- 信号 ( sinal )
JAVA线程之间的通信
- synchronized同步
- while轮询
- wait/notify机制
- 管道通信
JAVA内存区域(运行时数据区)
- 方法区:存放类信息,常量,static变量
- 堆:存放实例对象
- 虚拟机栈:执行方法时的内存模型
- 本地方法栈:本地nativa方法
- 程序计数器:执行下一条指令的地址
其中方法区和堆是信息共享的,程序计数器和栈是线程私有的
JAVA内存模型
线程修改私有数据,直接在工作空间修改
线程修改共享数据,把数据复制到工作空间中去,在工作空间中修改,修改完成以后,刷新内存中的数据
JMM对并发编程三个特性的保证
原子性
- Synchronized
- Lock
可见性
- Synchronized
- Lock
- Volatile
有序性
- Synchronized
- Volatile
- Happens-before原则
- as-if-seria语义