锁的获取和释放
线程释放锁时,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
来源:CSDN
作者:qq_43382364
链接:https://blog.csdn.net/qq_43382364/article/details/104558557