Thread线程安全一

Java内存模型与多线程

计算机读取数据的优先顺序是寄存器>高速缓存>内存

JLS(java语言规范)定义了一个同一的内存管理模型JMM(Java memery model),JMM屏蔽了底层平台的内存管理细节,在多线程中必须解决的两个问题是可见性时序性

JMM规定了主内存和工作内存,主内存就是平时所说的堆内存,存放程序中所有的类实例,静态变量等数据,是多个线程共享的,工作内存存放的是该线程从主内存中拷贝过来的变量及访问方法所取得的局部变量,每个线程都是私有的,其他线程不能够访问,多个线程之间不能直接进行传递数据通信,只能通过共享变量来进行。

主内存是多个线程所共享的,工作内存存储了某些对象的副本。当单个线程操纵某个对象时,执行顺序如下:

1.从主内存中复制变量道工作内存

2.执行代码,改变工作内存中复制过来的共享变量

3.用工作内存的数据刷性主内存中的相关内容

因此单个线程与线程之间就有了隔离效果,称之为可见性

时序性:

由可见性可以知道,线程是先从主内存中复制变量道工作内存,同一线程引用同一字段的时候,可能是从主内存中复制也有可能是直接引用工作内存的变量,多个线程操纵变量时,操作变量的先后顺序决定了结果是否正确。称之为时序性。

猜你喜欢

转载自blog.csdn.net/qq_36213444/article/details/89416632