随笔分类 -  技术源码

技术源码
线程池源码解析
摘要:1.execute干了哪些事情 1.1:首先判断任务是否为空 1.2:: 判断工作线程数是否小于核心线程个数,小于则新增核心线程去处理该任务,然后返回。ctl是一个AtomicInteger变量,高3位表示线程池状态,低29位表示工作线程个数。 1.3:如果核心线程个数已满,线程池状态是RUNNIN 阅读全文
posted @ 2023-06-29 13:15 路飞_lufei 阅读(16) 评论(0) 推荐(0) 编辑
openfeign源码浅析
摘要:问题: 1.@FeignClient怎么解析的。 2.@FeignClient标注的接口放到spring容器里存的是什么。 3.调用@FeignClien接口的方法是怎么执行的。 1.@FeignClient怎么解析的? 首先从@EnableFeignClients入手,这个注解里面引入了Feign 阅读全文
posted @ 2023-02-19 00:17 路飞_lufei 阅读(48) 评论(0) 推荐(0) 编辑
springboot启动流程解析
摘要:主要看下new SpringApplication逻辑和run方法逻辑: new SpringApplication逻辑: 进入run方法后,会 new 一个SpringApplication 对象,创建这个对象的构造函数做了一些准备工作,核心步骤如下:确定应用程序类型在SpringApplicat 阅读全文
posted @ 2022-12-15 19:03 路飞_lufei 阅读(51) 评论(0) 推荐(0) 编辑
spring容器的refresh方法分析
摘要:从这里进去: 进入到refresh方法中,有10几个子方法,一个个讲。 1.prepareRefresh,刷新前的准备工作,比如:设置容器启动时间,设置活跃状态为true,设置关闭状态为false,获取environment对象,并加载当前的属性值到environment对象中,准备监听器和事件的集 阅读全文
posted @ 2021-02-23 16:43 路飞_lufei 阅读(307) 评论(0) 推荐(2) 编辑
源码解析-HashMap put方法解析
摘要:put方法主要干这几件事情:1.算出key的hash值,key的hashcode的高低位异或算出来。 2.若果散列表为空,则初始化散列表。 3.算出散列表下标位置,(n - 1) & hash。 4.散列表下标位置值为空,则把传入的参数封装成node节点设置到散列表下标位置。 5.如果该散列表下标的 阅读全文
posted @ 2021-02-08 09:58 路飞_lufei 阅读(134) 评论(1) 推荐(1) 编辑
源码解析-HashMap扩容(红黑树单独讲)
摘要:扩容的场景这里不累赘讲了,比如第一次put的时候,还有就是插入完以后,也还要判断是否要扩容。直接看源码吧。 1.扩容的方法如下,主要干这几件事情,第一件,算出新数组长度和新数组扩容阈值,创建新数组。第二件,扩容前的数组元素迁移到扩容后的数组当中去。主要分为单个元素的迁移,链表的迁移,红黑树的迁移(下 阅读全文
posted @ 2021-02-07 12:12 路飞_lufei 阅读(569) 评论(0) 推荐(0) 编辑
源码解析-spring循环依赖源码解析
摘要:假设:A依赖B,B依赖A,A,B相互依赖. 大体流程如下图所示: 首先A先执行getBean(),getBean里面调用doGetBean方法,doGetBean再调用getSingleton(beanName)从缓存中获取实例,进入方法里面,先从一级缓存里面拿,一级缓存里面没有,再从二级缓存,二级 阅读全文
posted @ 2021-02-05 14:29 路飞_lufei 阅读(71) 评论(0) 推荐(0) 编辑
源码解析-ReentrantLock源码解读
摘要:传入参数为true,是公平锁,false为非公平锁。 我们这边解读源码以非公平锁为例来解读: compareAndSetState(0, 1)通过CAS设置state状态为1,如果设置成功则加锁成功,设置当前拥有独占访问权限的线程为当前访问线程。后面没有设置成功的线程执行else中的acquire( 阅读全文
posted @ 2021-02-03 16:57 路飞_lufei 阅读(59) 评论(1) 推荐(1) 编辑




点击右上角即可分享
微信分享提示