java 多线程并发实质

首先我们都知道多线程在获取共享资源时,往往会出现意想不到的结果,这是为什么呢?线程获取共享资源的过程如下图:

首先我们需要了解jvm内存结构,在这里不过多说明,由上图我们可以知道,在jvm内存中分为独立内存和共享内存,独立内存是我们每个线程独有的信息,而共享内存就是我们每个线程都可以访问的数据,由于线程在获取共享数据的时候是一个过程,有左部分图我们可以知道,首先我们获取共享数据读取到每个线程的缓存空间,然后进行加载读取赋值写入同步等操作,在多线程并发访问时我们如果一个线程获取了堆内存中的数据,此时其他线程也访问此共享数据,我们第一个线程数据还没有修改更新到堆内存中,那么第二个线程此时读取数据就是脏数据。我们如果加上了Synchronizer等同于把我们执行过程作为一个整体,直接读取堆内存数据不在读取缓存,这样我们就可以实时获取最新数据,那么volatile怎么回事呢?它是直接读取堆内存数据,也就是我们常说的可见性,但是他并没有处理我们线程获取的原子性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值