1. 概述 这一章主要讲到了行锁,从两阶段锁说起,提到了死锁和死锁检测,以及怎么解决热点行更新导致的性能问题。 2. 总结 2.1 行锁 行锁就是针对数据表中行记录的锁。这很...

1. 概述 这一章主要讲到了行锁,从两阶段锁说起,提到了死锁和死锁检测,以及怎么解决热点行更新导致的性能问题。 2. 总结 2.1 行锁 行锁就是针对数据表中行记录的锁。这很...
1. 概述 这一章主要讲到了全局锁和表锁,介绍了碰到锁时的现象和其背后的原理。 2. 总结 2.1 MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类 2.2 全局锁 ...
1. 概述 这一章是上一章索引的延续,主要讲到了覆盖索引、联合索引、最左前缀、索引下推等概念,为了让我们在复杂业务场景下,更合理的使用索引。 2. 总结 2.1 覆盖索引 覆...
1. 概述 这一章主要讲到了几种索引的常见模型,InnoDB的索引模型,主键索引和非主键索引,页分裂和页合并。以及使用自增主键和使用业务逻辑字段做主键的应用场景。 2. 总结...
1. 概述 这一章主要讲到了事务的隔离性与隔离级别,事务隔离的实现,提到了undo log,数据库多版本控制(MVCC),事务的启动方式,以及避免使用长事务。 2. 总结 2...
1. 概述 这一章主要是通过一条SQL更新语句是如何执行的作为引子,来讲述 MySQL 两个非常重要的日志模块,redo log(重做日志)和 binlog(归档日志)。 2...
1. 简单聊聊 我是一名后端工程师,MySQL 是我工作中不可或缺的一部分。可能很多人认为工作重点应该放在编程语言上,MySQL 只要能写出满足业务功能所需的 SQL 即可,...
1. 概述 CyclicBarrier 可以翻译为循环栅栏,它会阻塞一组线程直到这些线程同时达到某个条件才继续执行。它与 CountDownLatch 很相似,但又不同。Co...
1. 概述 CountDownLatch 可以翻译为倒计时器,它是一个线程或多个线程等待其它线程执行完操作后再执行后续操作。最常见的场景就是异步调用多个接口,等多个接口执行完...
1. 概述 Semaphore翻译成中文是信号量,是通过AQS实现的多线程工具类。Semaphore信号量主要用于两个目的,一个是用于多个线程对多个共享资源的互斥使用,另一个...
读写锁用的是同一个Sync同步器,因此等待队列、state等也是同一个 t1 w.lock,t2 r.lock t1 成功上锁,流程与 ReentrantLock 加锁相比没...
1. 非公平锁实现原理 加锁解锁流程 先从构造器开始看,默认为非公平锁实现,NonfairSync 继承自 AQS 没有竞争时 第一个竞争出现时 Thread-1 执行了 C...
过小会导致程序不能充分地利用系统资源,容易导致饥饿 过大会导致更多的线程上下文切换,占用更多内存 1. CPU 密集型运算 通常采用 cpu 核数 + 1 能够实现最优的CP...
1. 概述 LongAdder是jdk1.8新增加的原子累加器,相较于AtomicLong,LongAdder有更加优秀的性能。 2. 原理 LongAdder在没有线程竞争...
1. 概述 什么是缓存行伪共享?这个就需要说下计算机的硬件组成,CPU的高速缓存是由缓存行组成的,通常是64字节,并且它有效地引用主内存中的一块地址。在程序运行过程中,每次更...
1. 概述 CAS全程为Compare And Set(也有Compare And Swap的说明),它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果...
1. 概述 LockSupport,构建同步组件的基本工具,帮AQS完成相应线程的阻塞或者唤醒的工作。 2. 主要方法 主要介绍LockSupport类的park()和unp...
1. 线程复用 ThreadPoolExecutor是如何实现线程复用的呢?让我们直接从ThreadPoolExecutor源码中找寻答案。 ThreadPoolExecut...
1. 线程池概念 线程池:简单来说,它就是一个管理线程的池子。 帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过...
对于线程状态有几种?有说5种的,还有的说是6种的。其实我们可以从不同角度来看待这个问题。 1. 操作系统 如果从操作系统角度来看待线程状态,应该有5种。 【初始状态】:仅是在...