概念
在一个操作中,cpu不可以在中途暂停再调度,也就是一个操作不能被终端,要么执行完成,要么就不执行
Java内存模型保证原子性的操作:
基本数据类型的访问、读写都是具备原子性的(可以不用太在意long、double的非原子性协定)
synchronized关键字
底层是两个字节码指令,monitorenter和monitorexit
概念
当一个线程修改了共享变量的值时,其他线程能立即得知这个修改
Java内存模型保证可见性的操作
volatile
在变量读取前从主内存刷新变量
在对变量进行修改后将变量刷新到主内存
synchronized
在对一个变量执行unlock之前,必须先把此变量同步回到主内存中
final
被final修饰的字段在构造器中被初始化完成,并且构造器没有把“this”的引用传递出去,在其他线程中就可以访问final字段的值
概念
如果在本线程内观察,所有的操作都是有序的
线程内似表现为串行的语义
如果在一个线程中观察另一个线程,所有线程都是无序的
指令重排序
工作内存与主内存同步延迟
Java内存模型保证有序性的操作
volatile
禁止指令重排序
synchronized
原文:https://www.cnblogs.com/LittleSkinny/p/14420108.html