对Java内存模型的理解
程序员文章站
2022-06-01 11:55:58
...
比如有一个public class:
public class HelloWorld{
private int data = 0;
public void increment(){
data++;
}
}
建立一个对象:
HelloWorld helloWorld = new HelloWorld();
有两个线程同时对其进行操作:
new Thread1(){
public void run(){
helloWorld.increment();
}
}.start();
new Thread2(){
public void run(){
helloWorld.increment();
}
}.start();
在Java内存模型中,这两个线程的工作过程是怎样的呢?
Java内存模型原理
1、helloWorld对象存在与主内存中,实例变量data的值是0;
2、线程1和线程2都有一个自己的工作内存,对应于CPU级别的缓存(CPU内的一块缓存空间)
3、每个线程更改data都要经过read、load、use、assign、store、write的过程。
(1)read:把data值读出来;
(2)load:加载到工作内存中;
(3)use:对data值进行修改;
(4)assign:把修改后的值放到工作内存中;
(5)store:把data值尝试往主内存中去写;
(6)write:把data值正式放回主内存中;
由于两个线程在同行进行,所以两个线程read到的data值可能都是0,use后的值都为1。
上一篇: 对Java内存的理解