企业wap网站模板官网网站建设企业

张小明 2026/1/3 0:32:40
企业wap网站模板,官网网站建设企业,wordpress跨域,世界交互设计最好的前10大学目录澄清误解synchronized 与 ReentrantLock对比乐观锁 vs 悲观锁公平锁 vs 非公平锁synchronized的锁升级ReentrantLock的CLH队列可重入与CAS的关系总结前言#xff1a; 上一篇在对比锁与volatile机制的时候#xff0c;因为没有太多考虑synchronized 和ReentrantLock的区分 上一篇在对比锁与volatile机制的时候因为没有太多考虑synchronized 和ReentrantLock的区分有一些关于锁的理解是有错误的。随着后续对这两个锁机制的理解决定不在当初的文章上进行改动了而是新写一篇记录学习过程。至于什么叫“浅谈”我已经预感到自己会对这个两个东西有逐渐深入的理解可能后续还会有对于它们俩的不同版本、不同层次的理解最开始的一篇从浅谈开始吧。澄清误解上一篇我发现的主要存在几个地方对“锁”的误解以下是我在学习了synchronized和ReentrantLock之后的修正。误解1锁 锁住的是共享内存不是线程不是代码逻辑。这个是概念性的理解但比较致命。首先ReentrantLock 它自己就是一个对象甚至和你要保护的共享内存没有直接关系。从这个角度上这个结论就是错的。另外即使对于synchronized 来说也不是锁住了它要保护的共享内存。synchronized(this/obj) 并不代表this/obj是它要上锁的内存这里的this/obj只是一个锁标志位不是说我的锁标志位object) 是什么我就锁住了什么object作为共享内存实际上你可以用任何的object作为锁标志位只是相同的object代表同一把锁。因此锁并不是锁住了共享内存而是规范了“共享内存的访问途径”。至于它的实现方式synchronized是一种用一个obj作为唯一的令牌保证同一时间只有一个线程能执行后面的临界区代码块。误解2代码逻辑执行到syncronized/ReentrantLock锁时会触发锁逻辑去访问对象头。这一个误解来自于我基于synchronized关键字出发了。synchronized关键字的效果是对某一个锁标志对象改变它的Markword。ReentrantLock则是它的实例化对象中的state字段作为标志位。这两者相似的地方是执行临界区前都是会判断一个标志位synchronized是访问obj 的mark wordlock.lock() 则是去访问lock 对象中的state。误解3锁是一种逻辑机制而不是物理屏障其实这里是没有误解的只是我理解到了但没有把这种理解应用到各个地方。当我们使用锁的时候实际上是进行了一种“规约先行”定义了某种逻辑规范如果程序遵守这个规范则可以达到“上锁”的目的如果代码没有遵循那么其实是锁不住的。这就是说并不是物理屏障不是说我对一段代码上了synchronized/ReentrantLock对象之后它就是铜墙铁壁了。锁的效果取决于代码是否按照这个约定去编写比如锁失效问题如果我用一把锁锁住了临界区用另一把锁或者干脆不用锁对临界区中的共享内存做修改很显然是可以立即成功的。因为这个时候修改操作没有遵守这个前面你上的那把锁的规范。synchronized 与 ReentrantLock对比都是锁机制这里想从相似和对比的角度去理解。乐观锁 vs 悲观锁首先回顾一下什么是乐观锁和悲观锁 。乐观锁乐观锁本质上是无锁行为进行检查-执行这一个原子操作如果成功则执行成功如果失败则说明线程抢占失败。悲观锁假设冲突一定会发生。于是先上锁再执行。无论是否是怎样的竞争场景执行代码前都对资源上锁。synchronized和ReentrantLock都是悲观锁。synchronized的使用就是在进行临界区前必须先获得锁如果锁被其他线程持有则当前线程阻塞。但是注意synchronized在退出同步块时锁自动释放。ReentrantLock 使用lock()方法获取锁在进入try{}块的临界区前也是要获取锁的否则阻塞。ReentrantLock则在finally快中用unlock()手动释放。公平锁 vs 非公平锁先回顾一下什么是公平锁和非公平锁。公平锁对于抢占资源的线程严格尊重FIFO规则进行阻塞和执行。即先阻塞的先被唤起。非公平锁线程对资源的执行不严格遵守FIFO即先阻塞的也有可能被后来的线程“插队”执行。synchronized是非公平锁且只是非公平锁。ReentrantLock默认是非公平锁可配置为公平锁。synchronized的锁升级很多程序员看八股文的时候都记得synchronized锁升级的概念这东西背着也没意义只是指导理解在这里再简单说一下。synchronized锁有4种状态相应地mark word中关于锁的存储信息也不一样。无锁 (No Lock) - 偏向锁 (Biased Lock) - 轻量级锁 (Lightweight Lock) - 重量级锁 (Heavyweight Lock)。synchronized作为JVM层级的实现性能是它的首要考量。非公平锁的性能是优于公平锁的。当synchronized关键字升级为重量级锁时此时markword 存的是Monitor对象的地址这个Monitor对象里有一个字段是EntryList抢锁失败的线程会进入EntryList队列阻塞等待被唤起执行。但是这个EntryList不是严格FIFO的当锁释放的时候新来的线程回合EntryList的头线程一起竞争锁。ReentrantLock的CLH队列默认是非公平锁时线程来了还是会先抢一下和synchronized类似如果抢到了就立即执行如果没抢到再去排队。ReentrantLock是基于AQS的AQS作为一个基础数据结构里面有一个CLH队列名字不重要好像是三个人的名字缩写。简单来说如果ReentrantLock配置为公平锁那么等待线程进队列和出队列的过程是遵循FIFO的。可重入ReentrantLock从名字上就能看出它是可重入锁其实synchronized也是可重入的。先说syncrhonized 的它是JVM层面对可重入的次数进行统计。依赖于一个C对象中的字段_recursions记录递归重入的次数。ReentrantLock基于AbstractQueuedSynchronizer(AQS)AQS是一个数据结构JUC包的基础数据结构。其中它有一个字段叫state是int 型的。state0说明锁未被占用state1记录了重入的次数。与CAS的关系在前面的解释中适中有一个概念被隐去了就是CAS。CAS这个魔法操作其实可以说在这两个锁机制里随处可见。因为它是最底层的CPU级别的原子指令在最后解释。CAS是什么Compare-And-Swap一条原子性CPU指令如果想改变变量V的值从A到B先检查内存 V 里的值是不是 A如果是就把它改成 B如果不是说明被别人改过了返回失败。CAS这个工具很重要首先它是原子性的另外它是无锁的有极高的效率。这两点决定了它在提成并发编程的效率性角度会被广泛应用。CAS在锁中的应用场景synchronized和ReentrantLock在抢占锁的时候都执行了CAS即如果CAS成功则表示抢占锁成功。synchronized和ReentrantLock在抢占失败的线程入队列时也执行了CAS保证入队列的操作是线性单线程的。自旋锁基于CAS还有一种自旋锁其实也是一种“无锁”利用CAS的特点不断去抢占执行直到成功执行当然如果抢占不成功会一直自旋于是叫自旋锁。优点是没有线程的阻塞和唤起不涉及内核切换高效。缺点是CPU可能长时间空旋浪费CPU资源比较适用于简单的操作。//对于单纯的计数器并发安全可以用CAS实现比锁效率高privatefinalAtomicLongbalancenewAtomicLong(0L);publicvoidupdateBalance(longdifference){longcurrentBalance;longnewBalance;do{currentBalancethis.balance.get();newBalancecurrentBalancedifference;if(newBalance0){thrownewInsufficientFundException();}}while(balance.compareAndSet(currentBalance,newBalance));}总结两个锁机制synchronized在JVM层比较底层。ReentrantLock则在Java代码JDK层偏引用层。本篇比较了synchronized和ReentrantLock在并发编程的多个锁概念上的解释。仔细理解会发现ReentrantLock在syncrhonized这种底层是线上其实借鉴了很多或者说它们是相互影响的对于锁机制的设计其实有非常多共通的设计模式。后记因为最近很喜欢和G老师、C老师进行学习但发现它们的逻辑还是不够严谨的它们产生幻觉对我给出的结论表示赞同。那么对于理解的不好的地方很容易被骗过得到错误的知识。前面很多错误的理解就是这么来的。好在在这个过程里我是不断在思考的这样就有纠错的可能。在我和AI一起学习的这段时间里我的心得始终是和它一起思考而不是任由它给结论。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

崇明建设镇乡镇府网站仿牌网站流量

你是否曾经被Wallpaper Engine创意工坊中精美的动态壁纸所吸引,却苦于复杂的下载流程?现在,一款基于Flutter开发的便捷工具能够彻底改变这一现状。Wallpaper Engine创意工坊下载器通过简化Steam平台的操作步骤,让每个人都能轻松获…

张小明 2025/12/30 16:44:03 网站建设

以前做弹幕现在的电影网站广州越秀建网站

WebAssembly二进制逆向分析完全指南:掌握wasm-decompile核心技术 【免费下载链接】wabt The WebAssembly Binary Toolkit 项目地址: https://gitcode.com/gh_mirrors/wa/wabt 你是否曾经面对一个WebAssembly二进制文件,却无从下手理解其内部逻辑&…

张小明 2025/12/31 0:50:57 网站建设

网站建设费用 开办费凡客和凡客诚品一样吗

一、技术破局:2亿参数开启语音交互新纪元 【免费下载链接】Step-Audio-2-mini-Base 项目地址: https://ai.gitcode.com/StepFun/Step-Audio-2-mini-Base 在语音人工智能领域,模型参数规模与部署成本长期困扰着中小企业的技术落地。Step-Audio 2 …

张小明 2025/12/28 10:14:15 网站建设

网站动态图片制作做微商加入什么移动电商网站

GitHub热门项目LLama-Factory详解:为什么它成为大模型微调首选框架? 在大语言模型(LLM)技术飞速发展的今天,越来越多的团队不再满足于“通用对话”能力,而是希望拥有一个真正懂自己业务的语言模型——比如能…

张小明 2025/12/28 10:10:10 网站建设

网站基本特点网站加油站

5步解锁智能权限菜单:让前端路由自动"活"起来 【免费下载链接】pig ↥ ↥ ↥ 点击关注更新,基于 Spring Cloud 2022 、Spring Boot 3.1、 OAuth2 的 RBAC 权限管理系统 项目地址: https://gitcode.com/gh_mirrors/pi/pig 还在为每次新增…

张小明 2025/12/28 10:08:07 网站建设