欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对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;

对Java内存模型的理解

2、线程1和线程2都有一个自己的工作内存,对应于CPU级别的缓存(CPU内的一块缓存空间)
对Java内存模型的理解

3、每个线程更改data都要经过read、load、use、assign、store、write的过程。

(1)read:把data值读出来;
(2)load:加载到工作内存中;
(3)use:对data值进行修改;
(4)assign:把修改后的值放到工作内存中;
(5)store:把data值尝试往主内存中去写;
(6)write:把data值正式放回主内存中;

对Java内存模型的理解
由于两个线程在同行进行,所以两个线程read到的data值可能都是0,use后的值都为1。

相关标签: java