锁的获取和释放

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

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

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

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

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

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

主要理解以下几句话:

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

java锁的内存语义

java锁的内存语义

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

相关文章:

  • 2022-12-23
  • 2021-06-14
  • 2021-08-14
  • 2022-01-10
  • 2022-01-03
  • 2022-03-02
  • 2021-12-02
  • 2022-02-18
猜你喜欢
  • 2021-09-07
  • 2022-02-23
  • 2021-06-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-28
相关资源
相似解决方案