Java内存模型是围绕着线程在并发过程中如何处理原子性,可见性和有序性这3个特征来建立的。
原子性:由Java内存模型来直接保证的原子性变量操作由read,load,assign,use,store,write,我们大致可以认为基本类型的读写是具备原子性的。
可见性:可见性是指当一个线程修改变量值后,其他线程能立即知道这个修改,volatile实现可见是由于立即同步回主内存和使用前刷新来实现的,synchronized是通过在对变量执行unlock时必须同步回主内存这条规则实现的,final关键之实现可见性是当final修饰的字段在构造器中初始化完成后,构造器没有把this的引用传递出去,那么其他线程就能看见final字段的额值。
有序性:如果在本线程内观察,所有的操作都是有序的,即线程内表现为串行的语义;如果在一个线程中观察另一个线程,那么所有的操作都是无序的,即指令重排序优化和工作内存和主内存同步延迟现象。