自己做网站哪家好信用网站建设情况

张小明 2026/1/10 3:38:01
自己做网站哪家好,信用网站建设情况,聊城定制型网站开发,时尚杂志网站设计分析目录澄清误解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进行投诉反馈,一经查实,立即删除!

无锡网站制作一般多少钱自媒体网络营销是什么

在移动通信技术飞速发展的今天,手机整机测试标准成为确保产品质量的关键因素。本文为您详细介绍这份权威的手机硬件测试资源,帮助您轻松掌握专业的测试规范和方法。 【免费下载链接】手机整机测试标准资源下载 本资源提供了《手机整机测试标准》&#xf…

张小明 2026/1/10 3:34:46 网站建设

做网站和编程有关系吗网站建设多少钱一个月

Linly-Talker训练数据来源与隐私安全说明 在虚拟主播、AI客服和智能助手日益普及的今天,数字人技术正从“高不可攀的专业制作”走向“人人可用的平民化工具”。然而,随之而来的数据隐私问题也引发了广泛关注:我上传的照片和声音会不会被滥用…

张小明 2026/1/10 10:22:38 网站建设

有没有免费的seo网站怎么做网站埋点

汽车ECU中UDS 19服务的故障码捕获与读取实战解析你有没有遇到过这样的场景:客户投诉“偶尔亮故障灯”,可等他把车开到4S店,故障灯却自动熄灭了?维修人员连接诊断仪一查,系统显示“无当前故障”——问题真的不存在吗&am…

张小明 2026/1/9 8:46:55 网站建设

英文seo 文章发布类网站网站制作方案策划书

火电一次调频,自抗扰调频,群智能算法智能调频 matlab/simulink电力系统的调频技术就像给电网装了个智能空调——温度(频率)偏高就降降温,偏低就加把火。今天咱们唠唠火电厂的一次调频怎么玩出新花样,尤其是…

张小明 2026/1/10 11:19:55 网站建设

电商平台设计公司什么是网站关键字优化

虚拟桌面环境搭建与管理全攻略 在当今数字化时代,虚拟桌面技术为企业和个人用户提供了更加灵活、高效的工作方式。本文将详细介绍如何创建虚拟机器、安装 Windows Virtual PC 和 XP 模式,以及如何安装和配置 MED - V 服务器和客户端,帮助你轻松搭建和管理虚拟桌面环境。 创…

张小明 2026/1/10 12:59:36 网站建设

哪些公司提供微信做网站服务wordpress模板不显示文章页

快手无水印下载终极指南:KS-Downloader 完整使用教程 【免费下载链接】KS-Downloader 快手无水印视频/图片下载工具 项目地址: https://gitcode.com/gh_mirrors/ks/KS-Downloader 想要轻松保存快手无水印视频和图片?KS-Downloader 作为一款专业的…

张小明 2026/1/10 14:38:34 网站建设