Java内存模型中的可见性、原子性和有序性
1.原子性:指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。(用锁来保证原子性)
2.可见性:指当一个线程修改了某一个共享变量的值时,其他线程是否能够立即知道这个修改。Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值,这种依赖主内存作为传递媒介的方法来实现可见性的。(重点是volatile)
3.有序性:程序在执行时,可能会进行指令重排,重排后的指令与原指令的顺序未必一致。对于一个线程来说,它看到的指令执行顺序一定是一致的,即指令重排有一个基本前提,要保证串行语义的一致性。之所以要做指令重排,是为了尽量少地中断流水钱,减少中断从而提高CPU处理性能。(涉及Happen-Before原则)