随笔分类 -  源码阅读

摘要:1. 简介 本文基于JDK8u111的源码分析WeakHashMap的一些主要方法的实现。 2. 数据结构 就数据结构来说WeakHashMap与HashMap原理差不多,都是拉链法来解决哈希冲突。 下面是WeakHashMap中的Entry结构定义。 另外,每个WeakHashMap内部都有一个R 阅读全文
posted @ 2018-02-11 20:45 活在夢裡 阅读(932) 评论(0) 推荐(0)
摘要:1. 背景 本文基于MySQL InnoDB源码对InnoDB中非锁定一致性读是如何实现的作一些简单的探究。 2. 基本概念 2.1 隐藏字段 在经典之作《高性能MySQL》的1.4节中提及了MySQL中MVCC的实现,原著中提及了 InnoDB implements MVCC by storing 阅读全文
posted @ 2018-01-02 23:52 活在夢裡 阅读(2526) 评论(1) 推荐(0)
摘要:本文针对MySQL InnoDB中在Repeatable Read的隔离级别下使用select for update可能引发的死锁问题进行分析。 1. 业务案例 业务中需要对各种类型的实体进行编号,例如对于x类实体的编号可能是x201712120001,x201712120002,x20171212 阅读全文
posted @ 2017-12-22 00:42 活在夢裡 阅读(49986) 评论(1) 推荐(11)
摘要:1. 简介 JUC中的CyclicBarrier提供了一种多线程间的同步机制,可以让多个线程在barrier等待其它线程到达barrier。正如其名CyclicBarrier含义就是可以循环使用的屏障。 2. 源码解读 2.1 数据结构 2.1.1 Generation 在CyclicBarrier 阅读全文
posted @ 2017-12-02 17:44 活在夢裡 阅读(1284) 评论(1) 推荐(0)
摘要:1.简介 ConcurrentLinkedQueue是JUC中的基于链表的无锁队列实现。本文将解读其源码实现。 2. 论文 ConcurrentLinkedQueue的实现是以Maged M. Michael和Michael L. Scott的论文 "Simple, Fast, and Practi 阅读全文
posted @ 2017-11-10 01:02 活在夢裡 阅读(1313) 评论(2) 推荐(0)
摘要:1. 背景 之前读JUC的AQS源码,读到Condition部分,我当时也写了一篇源码阅读文章 (AbstractQueuedSynchronizer源码解读 续篇之Condition)[http://www.cnblogs.com/micrari/p/7219751.html]。Doug Lea大 阅读全文
posted @ 2017-10-11 00:54 活在夢裡 阅读(3343) 评论(4) 推荐(3)
摘要:1. 背景 在之前的博文 "ThreadPoolExecutor源码解读" 已经对ThreadPoolExecutor的实现原理与源码进行了分析。ScheduledExecutorService也是我们在开发中经常会用到的一种ExecutorService,JDK中它的默认实现类为Scheduled 阅读全文
posted @ 2017-10-10 00:28 活在夢裡 阅读(1686) 评论(0) 推荐(2)
摘要:1. 背景 最近读了Spring声明式事务相关源码,现在将相关原理及本人注释过的实现源码整理到博客上并对一些工作中的案例与事务源码中的参数进行总结。 2. 基本概念 2.1 基本名词解释 | 名词 | 概念 | | |: | |PlatformTransactionManager|事务管理器,管理事 阅读全文
posted @ 2017-10-03 21:58 活在夢裡 阅读(11074) 评论(2) 推荐(15)
摘要:1. 背景 在前文 "Spring IOC容器创建bean过程浅析" 已经介绍了Spring IOC创建初始化bean的大致过程。现在对Spring的AOP实现机制进行研究分析。 2. 名词与概念 | 名词 | 概念 | | |: | | Advice | 通知,在连接点的处理逻辑 | | Advi 阅读全文
posted @ 2017-09-24 00:46 活在夢裡 阅读(2514) 评论(0) 推荐(1)
摘要:1. 背景 cglib库的Enhancer在Spring AOP中作为一种生成代理的方式被广泛使用。本文针对Enhancer的用法以实际代码为例作一些介绍。 2. Enhancer是啥 Enhancer是cglib中使用频率很高的一个类,它是一个字节码增强器,可以用来为无接口的类创建代理。它的功能与 阅读全文
posted @ 2017-09-20 23:22 活在夢裡 阅读(18488) 评论(0) 推荐(4)
摘要:1. 背景 Spring框架本身非常庞大,源码阅读可以从Spring IOC容器的实现开始一点点了解。然而即便是IOC容器,代码仍然是非常多,短时间内全部精读完并不现实 本文分析比较浅,而完整的IOC创建bean实际上是非常复杂的。本文对于BeanDefinition的加载解析,bean实例化的反射 阅读全文
posted @ 2017-09-16 00:04 活在夢裡 阅读(6346) 评论(0) 推荐(2)
摘要:背景 最近在项目中看到太多后台task中使用Executor框架,提交任务后,把future都一个个加入到list,再一个个get这些future的代码。 这个的问题在于一方面没有时限,可能会被某些运行缓慢的future拖很久。即便使用带超时控制的get方法,这样加入list再get的做法依然很繁琐 阅读全文
posted @ 2017-09-08 18:31 活在夢裡 阅读(615) 评论(0) 推荐(0)
摘要:1. 背景与简介 在Java中异步任务的处理,我们通常会使用Executor框架,而ThreadPoolExecutor是JUC为我们提供的线程池实现。 线程池的优点在于规避线程的频繁创建,对线程资源统一管理,在任务到达时能快速响应。 本文从JUC的ThreadPoolExecutor源码出发来剖析 阅读全文
posted @ 2017-08-25 18:53 活在夢裡 阅读(2836) 评论(1) 推荐(1)
摘要:1. 背景与简介 Future是Java执行异步任务时的常用接口。我们通常会往ExecutorService中提交一个Callable/Runnable并得到一个Future对象,Future对象表示异步计算的结果,支持获取结果,取消计算等操作。在Java提供的Executor框架中,Future的 阅读全文
posted @ 2017-08-16 17:27 活在夢裡 阅读(3088) 评论(2) 推荐(2)
摘要:1. 背景 最近团队内部技术分享,我做了个关于AQS的分享。ppt中涵盖的部分要点内容,现在整理到博客上。 关于AQS本身的源码解读,可以参考 "我之前的博文" 。 2. 要点梳理 下面是一些技术分享的要点梳理。 2.1 LockSupport的实现 AQS中的阻塞/唤醒最终是基于LockSuppo 阅读全文
posted @ 2017-08-14 19:30 活在夢裡 阅读(1662) 评论(1) 推荐(0)
摘要:1. 背景 在之前的 "AbstractQueuedSynchronizer源码解读" 中,介绍了AQS的基本概念、互斥锁、共享锁、AQS对同步队列状态流转管理、线程阻塞与唤醒等内容。其中并不涉及Condition相关的内容。本文主要介绍AQS中Condition的实现即ConditionObjec 阅读全文
posted @ 2017-07-21 21:20 活在夢裡 阅读(3562) 评论(0) 推荐(0)
摘要:1. 背景 AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量、事件等)的基础框架类。JDK中许多并发工具类的内部实现都依赖于AQS,如ReentrantLock, Sem 阅读全文
posted @ 2017-06-03 17:52 活在夢裡 阅读(20373) 评论(18) 推荐(27)
摘要:1. 背景 ThreadLocal源码解读,网上面早已经泛滥了,大多比较浅,甚至有的连基本原理都说的很有问题,包括百度搜索出来的第一篇高访问量博文,说ThreadLocal内部有个map,键为线程对象,太误导人了。 ThreadLocal非常适合对Java多线程编程感兴趣的程序员作为入门类阅读,原因 阅读全文
posted @ 2017-05-20 15:39 活在夢裡 阅读(22931) 评论(36) 推荐(62)