并发编程的基础分类

  1. 线程间如何通信?
  2. 线程间如何同步?

两种通信机制

1、内存共享
2、消息传递

java并发采用的是共享内存模型

java内存模型的抽象

java中所有实例域、静态域和数组元素存在堆内存中,堆内存线程共享。

java线程间的通信由java内存模型(jmm)来控制:

线程共享变量在主内存(main memory)中,每个线程都有私有的本地内存(local memory),

  1. 内存共享是线程A把本地内存刷新到主内存中去。
  2. 线程B冲主内存中读取A更新过的共享变量。

指令重排

为了提升性能,编译器和处理器需要对指令重新排序

  1. 编译器优化的重排,不改变单线程语义的前提下,重排指令的执行顺序。
  2. 指令并行重排,