java锁的内存语义

荒凉一梦 提交于 2020-02-28 18:41:25

锁的获取和释放

线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。

线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从主内存中读取共享变量。

在共享变量的可见性方面,锁的释放和获取和volatile是类似的。

对volatile变量进行写操作,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。

对volatile变量进行读操作,JMM会把该线程对应的本地内存置为无效。再从主内存中读取共享变量。

锁获取和释放内存处理流程:

主要理解以下几句话:

1.线程A释放一个锁,实质上是线程A向接下来将要获取这个锁的某个线程发出了(线程A对共享变量所做修改的)消息。
2.线程B获取一个锁,实质上是线程B接收了之前某个线程发出的(在释放这个锁之前对共享变量所做修改的)消息。
3.线程A释放锁,随后线程B获取这个锁,这个过程实质上是线程A通过主内存向线程B发送消息。

在这里插入图片描述

在这里插入图片描述

参考博客:https://www.cnblogs.com/yuanfy008/p/9346925.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!