首页 文章 精选 留言 我的

精选列表

搜索[MiMo模型],共10000篇文章
优秀的个人博客,低调大师

Java 内存模型-锁的内存语义

章节目录 锁的释放-获取建立的 happens-before 关系 锁的释放-获取的内存语义 锁的释放-获取 建立的happens-before 关系 锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行之外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 如下所示,下面是锁释放-锁获取的示例代码 class MonitorExample { int a = 0; public synchronized void writer() { //1 a++; //2 } //3 public synchronized void reader(){ //4 int i = a; //5 .... //6 } } 假设线程A执行writer()方法,随后线程执行reader()方法。根据happens-before 规则,这个过程包含happens-before 关系可以分为3类: 1.程序次序规则,1 happens-before 2,2 happens-before 3; 4 happens before 5,5 happens-before 6 2.根据监视器锁规则,3 happens-before 4 3.根据happens-before 的传递性,2 happens-before 5 如下图所示,为锁的释放与锁的获取的happens-before 关系图 锁的释放与锁的获取 happens-before 关系图 锁的释放-获取的内存语义 线程释放锁的内存语义 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中 线程 获取锁的内存语义 当线程获取锁时,JMM会将该线程对应的本地内存置为无效。从而使得被监视 器保护的临界区代码必须从主内存中读取共享变量。 volatile 写-读内存语义 & 锁释放与获取的内存语义 volatile 写-读内存语义 & 锁释放与获取的内存语义 是相同的 1.线程A释放一个锁,即线程A向接下来获取这个锁的某个线程发送(A线程对共享变量做修改的)消息。 2.线程B获取一个锁,实质上是线程B接收了之前某个线程发出的(在释放这个锁之前对共享变量做修改)的消息。 3.线程A释放锁,随后线程B获取锁,这个过程实质上是线程A通过主内存向线程B发送消息。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册