归档

2024 年 11 月

2024-11-16

集合判空 《阿里巴巴 Java 开发手册》的描述如下: 判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()==0 的方式。 这是因为 isEmpty() 方法的可读性更好,并且时间复杂度为 O(1) 。 绝大部分我们使用的集合的 size() 方法的时间复杂度也是 O(1) ,不过,也有很多复杂度不是 O(1) 的,比如…
fullyRelease 方法 (AQS) final int fullyRelease(Node node) { boolean failed = true; try { // 获取当前节点的 state int savedState = getState(); // 释放锁 if (release(savedState)) { failed =…
前言 在介绍 AQS 时,其中有一个内部类叫做 ConditionObject,当时并没有进行介绍,并且在后续阅读源码时,会发现很多地方用到了 Condition ,这时就会很诧异,这个 Condition 到底有什么作用?那今天就通过阅读 Condition 源码,从而弄清楚 Condition 到底是做什么的?当然阅读这篇文章的时候希望你已经阅读了…
/** * 根据上一个节点的状态,判断当前线程是否应该被阻塞 * SIGNAL -1 :当前节点释放或者取消时,必须 unpark 他的后续节点。 * CANCELLED 1 :由于超时(timeout)或中断(interrupt),该节点被取消。节点永远不会离开此状态。特别是,具有取消节点的线程永远不会再次阻塞。 * CONDITION -2…
前言 AbstractQueuedSynchronizer 抽象队列同步器,简称 AQS 。是在 JUC 包下面一个非常重要的基础组件,JUC 包下面的并发锁 ReentrantLock CountDownLatch 等都是基于 AQS 实现的。所以想进一步研究锁的底层原理,非常有必要先了解 AQS 的原理。…
DelayQueue 源码解析 这里以 JDK1.8 为例,分析一下 DelayQueue 的底层核心源码。 DelayQueue 的类定义如下: public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E> { //... }…
DelayQueue 是 JUC 包( java.util.concurrent) 为我们提供的延迟队列,用于实现延时任务比如订单下单 15 分钟未支付直接取消。它是 BlockingQueue 的一种,底层是一个基于 PriorityQueue 实现的一个无界队列,是线程安全的。 DelayQueue 中存放的元素必须实现 Delayed…
布隆过滤器(Bloom Filter)是一种空间效率极高的数据结构,用于快速判断一个元素是否在集合中。它能够节省大量内存,但它有一个特点:可能存在误判,即可能会认为某个元素存在于集合中,但实际上不存在;而对于不存在的元素,它保证一定不会误判。布隆过滤器适合在对存储空间要求极为严格,同时能接受少量误判的应用场景中使用。 1. 布隆过滤器的工作原理…
InnoDB 的 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是 MySQL 实现高并发事务处理的一种机制。通过 MVCC,InnoDB 可以在高并发环境下支持 事务隔离 ,并提供 非阻塞的读操作 ,从而避免锁定所有读操作带来的性能瓶颈。MVCC 允许事务在不加锁的情况下读取数据,保证了性能和一致性。…
在数据库事务管理中, Undo Log 和 Redo Log 是两种关键日志,用于保障事务的 原子性 和 持久性 。它们的作用是确保数据库在出现崩溃、断电、宕机等故障时,能够进行恢复操作,从而保障数据一致性和完整性。它们通常用于支持事务的 ACID 特性中的 原子性 和 持久性 。下面将分别介绍 Undo Log 和 Redo Log…
上一页 下一页