java内存模型

1. 原子性

对于32位系统来说,对long型的数据类型的读写不是原子性的,因为long有64位

2. 可见性

有的时候当一个CPU的一个线程更改了数据,另一个CPU的线程并不知道。

3. 有序性

因为指令是流水线执行的,有的时候造成不必要的停顿,因此为了能提高效率,就进行了指令重排。

工作内存和主内存

每个线程都有自己的工作内存,工作内存是主内存的一个副本。线程的所有的读写都在工作内存中不同的线程不能去访问对方的工作内存。

Volatile

volatile是一种轻量级的sychronized,它解决了可见性问题,在汇编中volatile中会加上lock字段,lock实现了三个功能

  1. 形成一道屏障,使得重排序的时候前面的不会排到后面去,后面的也不会排到前面去。
  2. 强制缓存的修改操作并立即写入主存
  3. 使其他CPU对应的缓存失效

你可能感兴趣的:(java内存模型)