可见性:一个线程对共享变量做出修改(工作内存修改后,还未同步更新主内存或者主内存更新后,其他线程读取的还是自己的工作内存),
能够被其他线程看到(通知到)。
前后会加上lock指令,在操作完变量后,会强制写回主内存。通过协议嗅探机制,通知其他的线程从主内存读取数据(同步自己的工作内存)
有序性:通用内存屏障指令保证代码执行时不进行指令重排。(loadBarrier读屏障、storeBarrier写屏障)
禁止指令重排:在执行程序时,为了提高性能,编译器和处理器
不能保证原子性
使用volidate的条件
1.只有一线程修改变量
2.写入的变量不依赖其他线程的变量值
3.变量不需要和其他需要变更状态的变量之间有依赖
4.访问变量时,没有其他原因加锁