对Java内存模型的理解

比如有一个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。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值