1. 背景 之前读JUC的AQS源码,读到Condition部分,我当时也写了一篇源码阅读文章–(AbstractQueuedSynchronizer源码解读–续篇之Condition)[http://www.cnblogs.com/micrari/p/7219751.html]。Doug Lea大师的代码写的很好,整个设计与编码都很优秀。但是我也在最后的思考与总结中指出了Condition...
1. 背景 在之前的博文–ThreadPoolExecutor源码解读已经对ThreadPoolExecutor的实现原理与源码进行了分析。ScheduledExecutorService也是我们在开发中经常会用到的一种ExecutorService,JDK中它的默认实现类为ScheduledThreadPoolExecutor。本文针对ScheduledThreadPoolExecutor...
1. 背景 最近读了Spring声明式事务相关源码,现在将相关原理及本人注释过的实现源码整理到博客上并对一些工作中的案例与事务源码中的参数进行总结。 2. 基本概念 2.1 基本名词解释 | 名词 | 概念 | | ————- |:————-| |PlatformTransactionManager|事务管理器,管理事务的各生命周期方法,下文简称TxM...
1. 背景 在前文Spring IOC容器创建bean过程浅析已经介绍了Spring IOC创建初始化bean的大致过程。现在对Spring的AOP实现机制进行研究分析。 2. 名词与概念 | 名词 | 概念 | | ————- |:————-| | Advice | 通知,在连接点的处理逻辑 | | Advisor | Advis...
1. 背景 cglib库的Enhancer在Spring AOP中作为一种生成代理的方式被广泛使用。本文针对Enhancer的用法以实际代码为例作一些介绍。 2. Enhancer是啥 Enhancer是cglib中使用频率很高的一个类,它是一个字节码增强器,可以用来为无接口的类创建代理。它的功能与java自带的Proxy类挺相似的。它会根据某个给定的类创建子类,并且所有非final的方法...
1. 背景 Spring框架本身非常庞大,源码阅读可以从Spring IOC容器的实现开始一点点了解。然而即便是IOC容器,代码仍然是非常多,短时间内全部精读完并不现实 本文分析比较浅,而完整的IOC创建bean实际上是非常复杂的。本文对于BeanDefinition的加载解析,bean实例化的反射调用细节不作介绍,仅以较为粗略的角度来大体感受IOC容器创建bean的过程。 本文涉及的Sp...
背景 最近在项目中看到太多后台task中使用Executor框架,提交任务后,把future都一个个加入到list,再一个个get这些future的代码。 这个的问题在于一方面没有时限,可能会被某些运行缓慢的future拖很久。即便使用带超时控制的get方法,这样加入list再get的做法依然很繁琐。 其实在《Java并发编程实战》或者《Java多线程编程的艺术》这些书中都介绍过JDK提供...
介绍 Paxos算法是一个高容错性的分布式一致性算法。去年学习过Paxos算法,一直没将整理到博客。现在将经典Paxos算法相关内容整理到博客上。 经典Paxos算法本身也并不是太难理解,Lamport从期望的结果出发,通过增强条件一步步反推,最终发掘出可以保证了系统一致性的Paxos算法。如果能仔细体会到这其中一步步的反推,就会觉得Paxos是个很自然的东西了。 首先了解一下Paxos算...
1. 背景与简介 在Java中异步任务的处理,我们通常会使用Executor框架,而ThreadPoolExecutor是JUC为我们提供的线程池实现。 线程池的优点在于规避线程的频繁创建,对线程资源统一管理,在任务到达时能快速响应。 本文从JUC的ThreadPoolExecutor源码出发来剖析线程池的实现原理。 要比较轻松地理解ThreadPoolExecutor源码,最好需要对A...
1. 背景与简介 Future是Java执行异步任务时的常用接口。我们通常会往ExecutorService中提交一个Callable/Runnable并得到一个Future对象,Future对象表示异步计算的结果,支持获取结果,取消计算等操作。在Java提供的Executor框架中,Future的默认实现为java.util.concurrent.FutureTask。本文针对Future...
A new version of content is available.