加载中
理解 Raft 分布式共识算法

Raft 算法是一类基于日志复制的分布式共识算法,旨在提供与 Multi-Paxos 共识算法相同的容错性和性能的前提下,追求更好的可理解性和工程可实现性。Paxos 算法为分布式系统面临的共识问题提供...

2020/09/28 16:17
3.8K
深入理解 JUC:ThreadPoolExecutor

线程池是 JUC 中的核心组件之一,在并发编程中我们一般都会引入线程池,一方面考虑是为了减少线程创建、销毁,以及频繁上下文切换所带来的性能开销,另一方面也是为了简化对线程创建、复用,...

2020/09/17 18:30
439
深入理解 JUC:LinkedTransferQueue

上一篇我们分析了 SynchronousQueue 队列的设计与实现。在 SynchronousQueue 内部定义了一个 Transferer 抽象类,并继承该类基于 Dual Queue 和 Dual Stack 数据结构分别实现了 SynchronousQ...

2020/09/16 18:15
480
深入理解 JUC:SynchronousQueue

本文我们一起来分析一下 SynchronousQueue 的设计与实现。不同于前面介绍的一系列线程安全队列,SynchronousQueue 从真正意义上来说并不能算是一个队列,而将其理解为一个用于线程之间通信的...

2020/09/15 13:59
2.9K
深入理解 JUC:DelayQueue

延迟队列 DelayQueue 用于存放具有过期属性的元素,被添加到 DelayQueue 中的元素只有在到达过期时间之后才会出队列,常用于延迟任务调度。DelayQueue 本质上是一个无界的阻塞队列,底层依赖...

2020/09/14 13:58
843
深入理解 JUC:PriorityBlockingQueue

优先级队列 PriorityQueue 应该是大家都比较熟悉的一个集合组件,本文将要介绍的 PriorityBlockingQueue 是 PriorityQueue 的线程安全版本。PriorityBlockingQueue 底层依赖于数组作为存储结...

2020/09/13 14:22
636
深入理解 JUC:LinkedBlockingQueue

上一篇我们分析了无界非阻塞线程安全队列 ConcurrentLinkedQueue 的设计与实现,本篇我们继续分析线程安全队列 LinkedBlockingQueue 的实现机制。由 Blocking 字样可以推断出 LinkedBlocking...

2020/09/12 16:26
338
深入理解 JUC:ConcurrentLinkedQueue

ConcurrentLinkedQueue 是线程安全的无界非阻塞队列。在 JUC 包中,线程安全的队列按照实现方式可以分为阻塞队列和非阻塞队列两大类,前者基于锁来保证线程安全,而后者则基于 CAS 机制保证线...

2020/09/11 13:47
4.9K
深入理解 JUC:CopyOnWriteArrayList

CopyOnWriteArrayList 是线程安全的 List 实现,底层依赖于数组作为存储结构,并基于 写时复制(CoW: Copy-on-Write)机制 保证线程安全性。CopyOnWriteArrayList 在执行修改操作时会将底层数...

2020/09/10 13:41
4.2K
深入理解 JUC:Semaphore

前面我们分析了同步器 CountDownLatch 和 CyclicBarrier 的设计和实现,这两个同步器在使用上都有一个共同的特点,就是在构造时需要指定参与的线程数目,然后对计数器执行减值操作。本文将要...

2020/09/09 13:53
518
深入理解 JUC:CyclicBarrier

上一篇我们分析了 CountDownLatch 同步器的设计与实现,在日常开发中还有另外一个同步器组件 CyclicBarrier 常常令我们容易混淆。在文章 理清 CountDownLatch 与 CyclicBarrier 的区别 中我们...

2020/09/09 13:52
427
深入理解 JUC:CountDownLatch

CountDownLatch 是一个同步辅助工具,用于阻塞当前一个或多个线程以等待其它线程中的操作完成。在构造 CountDownLatch 对象时,我们需要指定一个非负的 count 值,一般情况下,调用 CountDow...

2020/09/08 17:50
1K
深入理解 JUC:ReentrantLock

上一遍我们深入分析了 AQS 的设计与实现,了解到 AQS 是 JUC 包实现的基础支撑,本文我们就来分析一个基于 AQS 实现的 JUC 组件,即 ReentrantLock。 ReentrantLock 译为可重入锁,我们在使用...

2020/09/07 18:13
792
深入理解 JUC:AQS 队列同步器

AbstractQueuedSynchronizer 简称 AQS,可能我们几乎不会直接去使用它,但它却是 JUC 的核心基础组件,支撑着 java 锁和同步器的实现,例如 ReentrantLock、ReentrantReadWriteLock、CountDo...

2020/09/05 16:48
2.6W
深入理解 JUC:synchronized 关键字

关键字 synchronized 是 java 程序员在进入并发编程世界时的银弹,只要是遇到有并发访问安全的地方,会无脑的加上一个 synchronized 关键字进行修饰。但是随着对 java 并发编程的逐渐深入,我...

2020/07/18 13:17
758
MyBatis 源码解析:SQL 语句执行机制

通过前面两篇文章,我们完成了对 MyBatis 所有配置文件(包括配置文件和映射文件)解析过程的分析。回忆一下我们最开始给出的小示例(如下),经过前面的跋山涉水,我们终于完成了第一行代码...

2020/06/11 09:31
5.1W
MyBatis 源码解析:映射文件的加载与解析

上一篇我们分析了配置文件的加载与解析过程,本文将继续对映射文件的加载与解析实现进行分析。MyBatis 的映射文件用于配置 SQL 语句、二级缓存,以及结果集映射等,是区别于其它 ORM 框架的主...

2020/06/10 13:03
2.1K
MyBatis 源码解析:配置文件的加载与解析

上一篇我们曾约定 mybatis-config.xml 文件为配置文件,SQL 语句配置文件为映射文件,本文我们将沿用上一篇中的示例程序,一起探究一下 MyBatis 加载和解析配置文件(即 mybatis-config.xml...

2020/06/09 09:24
4.1K
MyBatis 源码解析:架构初探

MyBatis 是一个易用、轻量,且强大的半自动化 ORM 框架,在设计思想和代码实现上都有许多值得我们借鉴的地方,例如动态代理机制的应用,资源文件的加载与解析,缓存模块的设计、反射机制的应...

没有更多内容

加载失败,请刷新页面

返回顶部
顶部