从Hikari看并发与死锁问题

简介 核心并发包 如何获取数据库连接 如何释放数据库连接 获取连接如何轻易出现死锁 简介 从目前测试的数据库连接池来说Hikari是最快的,故研究其源码,并举一反三看并发的问题。 核心并发包 Hikari快的核心就是ConcurrentBag并发包,先看看他的字段 1...

JVM之GC梳理

简介 GC算法 复制算法 标记-清除算法 标记-整理算法 分代收集算法 GC提供的实现 Serial GC Parallel...

线程池之ThreadPoolExecutor

简介 ThreadPoolExecutor层次图 ThreadPoolExecutor数据结构 workQueue的实现 源码流程 提交线程 Worker的一生 应用杀死Worker 线程池配置 Task是CPU密集:...

线程池之BlockingQueue

简介 ArrayBlockingQueue LinkedBlockingQueue LinkedBlockingQueue和ArrayBlockingQueue数据结构差异造成的公平性 SynchronousQueue 队列的应用场景 测试demo 简介 BlockingQueue是线程池的一个非常重要的参数,一般实现有3种,分别是ArrayBlockingQueue、LinkedBlockingQueue和SynchronousQueue。 本文研究他们的take和put方法源码,分析他们的异同点。...

线程池之FutureTask

简介 FutureTask的作用 FutureTask层次图 FutureTask源码分析 FutureTask数据结构 FutureTask逻辑源码 简介 Java线程池部分常用的执行器是ThreadPoolExecutor,依赖底层的Future接口,本章节先介绍实现Future接口用得最多的FutureTask作为铺垫。 FutureTask的作用 首先得提出一个问题,Java创建线程的方式有几种?...

并发工具Semaphore CountDownLatch CyclicBarrier

简介 Semaphore CountDownLatch CyclicBarrier 简介 讲解三个JUC的三个工具Semaphore CountDownLatch CyclicBarrier,本质都是基于AbstractQueuedSynchronizer简称AQS AQS的知识可以查看互联网的资料或者我之前分析的JUCL之梳理(一) Semaphore...

JUCL之梳理(二)

简介 ReentranLock ReentrantReadWriteLock 简介 继续JUCL之梳理(一),重点讲解ReentranLock和ReentrantReadWriteLock的原理。 ReentranLock ReentranLock是可重入的独占锁,实现了Lock接口,即可以使用await和signal等方法,内部类NonfairSync/FairSync继承AQS。本质是实现Lock接口的方法,方法内部调用AQS的API。 这里涉及到公平锁/非公平锁的概念。公平锁类似先进先出,反之则是非公平锁。 根据JUCL的梳理(一)知道AQS是一个双向链表,出现非公平锁的原因只有在释放锁的时刻有新的锁获取了,导致双向链表等待的节点无法获取锁而继续park。 ReentranLock关键代码:...

JUCL之梳理(一)

简介 低层建筑CAS和LockSupport CAS:Compare and Swap LockSupport AbstractQueuedSynchronizer acquire release acquireShared...