java并发之Condition图解与原理剖析,mybatis面试题

本文详细分析了Java并发中Condition的实现原理,包括构造、await()和signal()的源码解读。文章通过图解方式展示了等待队列和同步队列的关系,以及线程如何在等待队列和同步队列之间转换。同时,提到了在MyBatis面试中可能涉及的相关知识点。
摘要由CSDN通过智能技术生成

}

}

/**

  • 获取元素操作

  • @return

  • @throws InterruptedException

*/

public E take() throws InterruptedException {

lock.lock();

try {

// 当数组为空时,调用notEmpty.await();使得获取元素的线程阻塞

while (count =

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

= 0) {

notEmpty.await();

}

E ret = items[head];

items[head] = null;

if (++head == items.length) {

head = 0;

}

–count;

// 唤醒插入元素的线程

notFull.signalAll();

return ret;

} finally {

lock.unlock();

}

}

}

上述案例中的tail、head、count有不大看的懂的,我做了个简单的的put(E e)和take()的图解

Condition实现的阻塞队列put(E e)图解

在这里插入图片描述

Condition实现的阻塞队列take()图解

在这里插入图片描述

4、Condtion 实现源码分析

4.1 互斥锁和读写锁中Condition的构造
4.1.1 AbstractQueuedSynchronizer中的ConditionObject

ReentrantLock与ReentrantReadWriteLock中的静态内部类Sync继承了AbstractQueuedSynchronizer,两者调用的sync.newCondition(),实际上调用的是new ConditionObject(),也就是构造的AbstractQueuedSynchronizer中的ConditionObject对象。

public class ConditionObject implements Condition, java.io.Serializable {\

/** 双向链表首节点*/

private transient Node firstWaiter;

/** 双向链表尾节点*/

private transient Node lastWaiter;

public C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值