CopyOnWriteArrayList 源码解读

缘起

CopyOnWriteArrayList(下简称COW) 是常见的线程安全的集合类. 它的源码是比较好读的—— 从它的源码你也知道为什么它的名字会是”写时复制”,其实这里所谓的”写时”指的是”增删改”. 其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会加(可重入)锁然后把原内容 Copy 出去形成一个新的内容然后再改,从而不影响别的线程读(读操作不加锁, 所以提高了效率,支持并发读). 所以也可以说COW借鉴了读写分离(读的和写的数据不是同一个)的思想.

Read More

ApplicationListener 源码解读

缘起

我们知道Spring提供了ApplicationListener接口给我们在容器中发布事件. 其实Spring IOC容器自己也发布事件——至少容器初始化(refresh)成功之后以及关闭之前会发布开启与关闭的事件. 此时我们就可以使用自定义的ApplicationListener来接收事件. 本文debug用的demo【1】

Read More