java内存模模型
-
-
- 原子性
- 有序性
- 可见性
- Happen-Before
- 线程安全的概念
-
线程模型图
原子性
-
-
- 原子性指的是一个操作是不可中断的,即是在多线程的情况下一起操作的时候,一旦开始就不会被其他的线程干扰
- 那么有个的问题了java中i++操作是原子性的么?
- 其实不然i++操作不是原子性的,i++至少有两个操作,读和写
- i++的原子性问题:
-
i++的实际操作分为3个步骤“读-改-写”
基础时对i++和++i的区别是
i++:现使用变量然后在对自身加1
++i:现对自身加一在使用变量
计算机底层对递增的算法是,先读取i的值存到一个临时变量中,在对这个临时变量进行加一的操作。此时这个变量的不具备线程中安全的性质,也就是说i++是可以出现线程干扰的。
int i = 10;
i=i++;
底层的操作是
int temp = i
i = I+ 1;
i=temp;
有序性
- 有序性指的是程序在运行的时候的顺序在多线程的情况下,其实我们是无法控制程序的运行顺序的,我们知道我们书写的代码是存一行一行执行的,在并发的程序中,程序的执行可能和我们的预想的执行顺序是不一样