技术
文章平均质量分 80
DiaoShi
这个作者很懒,什么都没留下…
展开
-
spring容器的refresh方法分析
从这里进去:进入到refresh方法中,有10几个子方法,一个个讲。1.prepareRefresh,刷新前的准备工作,比如:设置容器启动时间,设置活跃状态为true,设置关闭状态为false,获取environment对象,并加载当前的属性值到environment对象中,准备监听器和事件的集合对象,默认为空的集合。2.obtainFreshBeanFactory,主要是创建容器对象(DefaultListableBeanFactory),生成BeanDefination,这个时候Default原创 2021-02-23 17:28:51 · 2598 阅读 · 1 评论 -
源码解析-HashMap put方法解析
put方法主要干这几件事情:1.算出key的hash值,key的hashcode的高低位异或算出来。2.若果散列表为空,则初始化散列表。3.算出散列表下标位置,(n - 1) & hash。4.散列表下标位置值为空,则把传入的参数封装成node节点设置到散列表下标位置。5.如果该散列表下标的值不为空,如果key和hash值与传入的值相等,则直接覆盖,如果散列表下标的节点是红黑树,则走红黑树的逻辑,相等则覆盖,不相等,则插入,具体红黑树逻辑后面会讲解。6.如果当前散列表下标的值与传入的值不原创 2021-02-08 09:50:43 · 324 阅读 · 0 评论 -
源码解析-HashMap扩容(红黑树单独讲)
扩容的场景这里不累赘讲了,比如第一次put的时候,还有就是插入完以后,也还要判断是否要扩容。直接看源码吧。1.扩容的方法如下,主要干这几件事情,第一件,算出新数组长度和新数组扩容阈值,创建新数组。第二件,扩容前的数组元素迁移到扩容后的数组当中去。主要分为单个元素的迁移,链表的迁移,红黑树的迁移(下期再讲),下面我们依次来看一下hashmap它是怎么玩的吧。首先我们看下新数组长度和新数组扩容阈值是怎么算出来的。这里也分为两种情况,第一种是数组已经初始化过了。第二种是hashMap里面的散列表为null的原创 2021-02-07 12:06:11 · 824 阅读 · 2 评论 -
源码解析-spring循环依赖源码解析
假设:A依赖B,B依赖A,A,B相互依赖.大体流程如下图所示:1.A先执行getBean(),getBean里面调用doGetBean方法,doGetBean再调用getSingleton(beanName)从缓存中获取实例,进入方法里面,先从一级缓存里面拿,一级缓存里面没有,再从二级缓存,二级缓存没有再从三级缓存里拿,刚开始BeanA进来,1,2,3级缓存都是没有的。getSingleton(beanName)返回null.缓存里面都没有,调用createBean创建实例。进入createB原创 2021-02-05 14:09:12 · 166 阅读 · 0 评论 -
源码解析-ReentrantLock源码解读
传入参数为true,是公平锁,false为非公平锁。我们这边解读源码以非公平锁为例来解读:compareAndSetState(0, 1)通过CAS设置state状态为1,如果设置成功则加锁成功,设置当前拥有独占访问权限的线程为当前访问线程。后面没有设置成功的线程执行else中的acquire(1)方法。进入acquire(1)方法中,这个方法中包含了线程入队,尝试拿锁,LockSupport的park()阻塞线程。首先我们先看下tryAcquire(arg)方法,这个方法会调用nonfair原创 2021-02-03 19:37:35 · 136 阅读 · 0 评论 -
Alibaba Nacos集群搭建与使用
Spring cloud Netflix现状如何:Spring Cloud Netflix Projects Entering Maintenance Mode(Spring Cloud Netflix项目进入维护模式)https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now以上组件将不再进行新功能的添加。所以spring-cloud-alibaba后面就越来越流行了,并加入了springCloud官方孵化器原创 2021-02-03 17:31:40 · 350 阅读 · 0 评论