07 2021 档案
摘要:这篇主要介绍的是refresh方法中的第六至十几个步骤 registerBeanPostProcessors 注册BeanPostProcessor,这个需要和之前说的BeanFactoryPostProcessor区分开,这个processor是在getBean的时候调用的,这时候bean已经成了
阅读全文
摘要:parser.validate 本来想把parse、validate、loadBeanDefinition三个在一篇文章中介绍完的,但发现介绍完parse方法之后就很长了,只能另起篇章 这个方法就比较简单了,主要是对@Configuration和@Bean注解的一些校验 校验@Configurati
阅读全文
摘要:parser.parse 这个方法主要是解析传递进来的bean,这里只会传递一个bean,那就是AppConfig public void parse(Set<BeanDefinitionHolder> configCandidates) { for (BeanDefinitionHolder ho
阅读全文
摘要:调用BeanFactoryPostProcessor 接下来进入第一个非常非常复杂的逻辑:获取符合条件的对象,放入beanDefinitionMap中供后续流程的使用 protected void invokeBeanFactoryPostProcessors(ConfigurableListabl
阅读全文
摘要:refresh 在AnnotationConfigApplicationContext中说完了无参构造和register两个方法,接下来看最重要的一个方法:refresh,该方法包括了一个bean从实例化到初始化完成所有的流程,该方法在org.springframework.context.supp
阅读全文
摘要:Spring家族是我们工作中天天打交道的,这个框架帮我们省去了很多繁琐的工作,但也带来了一定的麻烦,那就是有时框架封装的太好,出现了错误不了解源码的情况下不知道该如何下手。 上图就是spring框架的结构,我们平时说的IOC就是在core container中。 bean和对象的区别 spring中
阅读全文
摘要:线程池,工作中用的非常多的一个类。当线程池化,我们都知道线程的开启与销毁很消耗性能,所以在一些框架中都将线程进行池化,比如Redis连接池、数据库连接池等等。线程池的核心思想是任务的提交与执行区分开 基本属性 线程池有哪些状态?线程池的线程数和状态是如何表示的?这些都可以从类的成员变量体现出来 //
阅读全文
摘要:特点 这是一个优先级队列,该队列中的元素必须是Compartor或者Comparable的实现类才可以; 这是一个无界队列,所以入队不需要等待,直接将元素写入即可,出队时如果队列中没有元素需要在Condition上等待,这样也说明了该队列只需要一个Condition即可; 该类的底层使用的是数组,成
阅读全文
摘要:延迟队列,顾名思义,是一个可延迟的队列,这是一个无界队列,其最大的特点就是队列中的数据按照设定的等待时间长短排序,队列的头部是剩余时间最短的元素。内部组合了PriorityQueue优先队列,队列的操作都是依靠该队列完成的;延迟队列的元素必须是Delayed的子类,而Delayed是Comparab
阅读全文
摘要:说了CountDownlatch就不得不说下CyclicBarrier,它们俩的功能是大同小异的。CyclicBarrier被称为同步屏障,它可以使一定数量的线程反复在屏障处汇集,当线程到达屏障处调用await方法,该线程就会在此处阻塞,直到所有线程都达到屏障,那么屏障就会打开,所有线程就会继续执行
阅读全文
摘要:CountDownLatch一般称为“倒计数器”,比如有个任务A,需要等其他几个任务执行完之后才可以执行;或者有这么一个业务:在解析Excel时,需要将Excel中的所有数据解析并校验完主线程才可以继续接下来的任务,这时候就可以使用这个类 基本结构 这个类的功能也是在AQS的基础上实现的,但它与之前
阅读全文
摘要:list 是我们平时工作中应用最多的集合之一,但ArrayList是线程不安全的如果想使用线程安全的话可以使用Vector,这个类虽然是线程安全的,但效率比较低下,在JUC包中还有一个类可以代替Vector,那就是今天的主角:CopyOnWriteArrayList——写时复制,看名字应该可以猜到在
阅读全文
摘要:从这个类名应该就能猜到这是一个读写锁,当我们在读多写少的场景下可以使用这个类来控制并发。 读和写是互斥的,当个写的线程获取到锁时,其他写和读的线程都无法获取锁,只能等该写线程释放锁之后才可以。 基本结构 ReentrantReadWriteLock实现了ReadWriteLock接口,这个接口只有两
阅读全文
摘要:给代码加锁可以使用synchronized进行加锁,这种加锁和释放锁是隐式的。也可以使用ReentrantLock进行显示的加锁和释放锁,分别对应lock和unlock方法。 ReentrantLock是一个互斥锁,分为公平锁和非公平锁。当我们创建一个ReentrantLock时默认是非公平锁,因为
阅读全文
摘要:目录: 1. 锁 2. AQS基本介绍 2.1 成员变量 2.2 节点 2.3 不可变方法 2.4 需要重写的方法 2.5 模板方法 2.5.1 acquire 2.5.2 release 2.5.3 acquireInterruptibly 2.5.4 acquireShared 2.5.5 re
阅读全文

浙公网安备 33010602011771号