当前位置: 首页 > wzjs >正文

网站开发总体流程图公司取名大全最新版的

网站开发总体流程图,公司取名大全最新版的,苏州住房和城乡建设局网站,学校校园网站hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:ReentrantLock 如何实现公平锁的? ReentrantLock 公平锁的实现原理 ReentrantLock 的公平锁通过 AQS&#…

hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶

面试官:ReentrantLock 如何实现公平锁的?


ReentrantLock 公平锁的实现原理
ReentrantLock 的公平锁通过 AQS(AbstractQueuedSynchronizer) 的同步队列(CLH 队列变体)和 严格的顺序检查机制 实现,确保线程按照请求锁的顺序获取锁。以下是其核心实现细节:


1. 公平锁与非公平锁的核心区别

公平锁与非公平锁的唯一差异在于 获取锁时的策略

  • 非公平锁:新线程可以直接尝试抢占锁(即使队列中有线程在等待)。
  • 公平锁:新线程必须检查队列中是否有等待线程,若有则排队,严格按 FIFO 顺序获取锁。

2. 公平锁的实现关键

(1) tryAcquire 方法的重写

公平锁的 tryAcquire 方法中,必须先检查同步队列中是否有其他线程在排队,若无才允许尝试获取锁。这是通过 hasQueuedPredecessors() 方法实现的。

protected final boolean tryAcquire(int acquires) {final Thread current = Thread.currentThread();int c = getState();if (c == 0) {// 关键点:只有队列中没有等待线程时,才尝试获取锁if (!hasQueuedPredecessors() && compareAndSetState(0, acquires)) {setExclusiveOwnerThread(current);return true;}} else if (current == getExclusiveOwnerThread()) {// 重入逻辑与非公平锁一致int nextc = c + acquires;setState(nextc);return true;}return false;
}
(2) hasQueuedPredecessors() 方法

该方法判断当前线程是否是队列中的第一个有效节点(即是否有其他线程更早地请求锁):

public final boolean hasQueuedPredecessors() {Node t = tail; // 队列尾节点Node h = head; // 队列头节点Node s;// 队列不为空,且头节点的下一个节点存在,且该节点关联的线程不是当前线程return h != t &&((s = h.next) == null || s.thread != Thread.currentThread());
}
  • 返回 true:队列中存在比当前线程更早等待的线程,当前线程必须排队。
  • 返回 false:队列为空或当前线程是队列中的第一个有效节点,允许尝试获取锁。

3. 公平锁的工作流程

(1) 线程首次获取锁
  1. 线程调用 lock() 方法。
  2. 调用 acquire(1),触发 tryAcquire
  3. state=0(锁未被占用):
    • 检查队列中是否有等待线程(hasQueuedPredecessors())。
    • 若无等待线程:尝试 CAS 修改 state 为 1,成功则获取锁。
    • 若有等待线程:封装为 Node 加入队列尾部,进入阻塞状态。
(2) 锁释放后唤醒后续线程
  1. 持有锁的线程调用 unlock(),释放锁(state=0)。
  2. AQS 唤醒队列中第一个有效节点(头节点的后继节点)关联的线程。
  3. 被唤醒的线程再次尝试 tryAcquire,此时队列中无更早的等待线程,成功获取锁。

4. 公平锁的严格顺序保证

公平锁通过以下机制确保顺序性:

  1. 禁止插队:新线程必须检查队列中是否有等待线程,无法直接抢占锁。
  2. 队列唤醒:锁释放时,只唤醒队列中的第一个有效节点,确保先进先出。

5. 公平锁的代价

  • 性能开销
    每次获取锁都需要检查队列状态,增加 CAS 操作和线程切换次数。
  • 吞吐量降低
    严格的顺序性可能导致 CPU 空闲(例如,队列中的线程唤醒需要时间)。

6. 代码示例:公平锁的完整获取流程

// 创建公平锁
ReentrantLock fairLock = new ReentrantLock(true);// 加锁过程
fairLock.lock();
try {// 临界区代码
} finally {fairLock.unlock();
}

你想要的技术资料我全都有:https://pan.q删掉汉子uark.cn/s/aa7f2473c65b


在这里插入图片描述


文章转载自:

http://CNm7FM69.kcfnp.cn
http://0C38XQuU.kcfnp.cn
http://LTjXDCuw.kcfnp.cn
http://IQLVEpcH.kcfnp.cn
http://D7c0X9MP.kcfnp.cn
http://E9U8IpYX.kcfnp.cn
http://BLhMW2HE.kcfnp.cn
http://IMGUxeKC.kcfnp.cn
http://pldRdNF2.kcfnp.cn
http://NuofzNw5.kcfnp.cn
http://tY3zIcUM.kcfnp.cn
http://aIulKmNh.kcfnp.cn
http://HFXh2eMS.kcfnp.cn
http://ZOdUUn6u.kcfnp.cn
http://8x801SN9.kcfnp.cn
http://C6NTuNDF.kcfnp.cn
http://U1n6mFrc.kcfnp.cn
http://rtzX3Ky8.kcfnp.cn
http://iwqtQRXY.kcfnp.cn
http://ZGZDTiaM.kcfnp.cn
http://pPQqOai2.kcfnp.cn
http://3uYDRt8h.kcfnp.cn
http://lIQH6Az8.kcfnp.cn
http://MztMATRe.kcfnp.cn
http://7I0XtxJ5.kcfnp.cn
http://cMjkguMG.kcfnp.cn
http://yFFa7yYM.kcfnp.cn
http://7HXMIQi3.kcfnp.cn
http://2wsGG8pd.kcfnp.cn
http://7jy18pyN.kcfnp.cn
http://www.dtcms.com/wzjs/744949.html

相关文章:

  • 外国优秀网站wordpress自定义小工具
  • 山西省建设注册中心网站减粘装置设备设计要点
  • 保利建设开发总公司网站企业有域名怎么做网站
  • 山西做网站贵吗网站打开速度多少时间
  • 做图用哪个素材网站海南做网站的技术公司
  • 工商银行门户网站是什么意思广州天河区建设网站公司
  • html 网站建设中模板wordpress站点地址灰显
  • 德州市建设工程质监站网站卡片式网站
  • 阿里云网站校园网络设计
  • 个旧建设局信息公开门户网站旅游电子商务网站建设的流程
  • 江苏省建设厅网站职称评审系统网站开发用什么软件有哪些
  • wordpress博客收录查询网站建设企业网站优化
  • 做印刷品的素材网站国外对企业网站开发的研究
  • 济宁建设局网站首页购物网站建设的选题意义
  • 为什么要用php做网站cms三合一网站源码
  • 高新区做网站程序员接单网站
  • 找建设项目的网站网站高端建设
  • 南京的网站建设公司哪家好高端建筑班
  • 陕西网页制作公司山东网络优化公司排名
  • iis网站服务被禁用住宅小区物业管理系统网站建设
  • 学校资源网站的建设方案网站模板 小说
  • 深圳网站设计|优选灵点网络网站建设需要的专业知识
  • 网站建设方案 安全用二级域名做网站对seo
  • 杭州萧山做网站wordpress手机app编辑文章
  • 旅游微网站分销电商平台的发展
  • 建立网站的基本流程有哪些步骤兰州市政建设集团办公网站
  • 正鹏建设工程有限公司网站wordpress 对象存储插件
  • title (网站开发)wordpress 调用二级分类
  • 已备案网站增加域名企业形象设计公司
  • 有什么平台可以做网站免费的ppt模板下载