文章目录
一、Java 内存模型
Java 内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节
Java 内存模型规定了所有的变量都存储在主内存中,每个线程也都有自己的工作内存,工作内存中保存了这个线程使用到的变量的主内存副本拷贝
JMM的关键技术点都是围绕着多线程的原子性、可见性和有序性来建立的
二、原子性(Atomicity)
原子性是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。
比如,对于一个静态全局变量int i
,两个线程同时对它赋值,线程A给它赋值1,线程B给它赋值为-1。那么不管这两个线程以何种方式、何种步调工作,i的值要么是1,要么是-1。线程A和线程B之间是没有干扰的。
这就是原子性的一个特点,不可被中断。
但如果我们不使用int
型数据而使用long
型数据,可能就没有那么幸运了。
对于32位系统来说,long型数据的读写不是原子性的(因为long型数据有64位)。也就是说,如果两个线程同时对long型数据进行写入(或者读取),则对线程之间的结果是有干扰的。
示例: