Java多线程可见性(一)

一:内存可见性
线程对共享变量的修改,可以及时的被其他线程看到。
那何为共享变量呢?就是在多个线程的工作内存中存在
如下图所示:所谓的共享变量就是主内存中名为S的变量,程序中所有的变量都会存储在主内存中;其他线程也会有自己的工作内存,此工作内存的作用是为线程与主内存之间建立桥梁
这里写图片描述
由此图总结如下:
1:其他线程不可以直接访问主内存中的变量,必须先与自己的工作内存进行交互再由工作内存与主内存进行交互。
2:不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需通过主内存来完成。
3:主内存作为其他线程之间相交互的桥梁,线程1中更改共享变量想被其他线程及时看到,则需要工作内存1将更新的值刷新到主内存中,由主内存将最新的共享变量值更新到工作内存2中
如下图所示:
这里写图片描述
二:可见性实现方式
1:synchronized
线程解锁:退出synchronized代码块时,主内存中的共享变量为最新值
线程加锁:进入synchronized代码块时,清空工作内存中共享变量的值,从而使用时从主内存中重新读取最新值
注:线程解锁前对共享变量的修改在下次加锁时对其他线程可见
实现可见性步骤:
获取互斥锁 - - >清空工作内存 –>从主内存拷贝变量的最新副本到工作内存 –>执行代码 –>将更改后的共享变量刷新到主内存 – >释放互斥锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值