![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析
文章平均质量分 90
JWASX
只是一个想写代码的小白
展开
-
ConcurrentHashMap的死循环问题
对于ConcurrentHashMap来说,能保证多线程下的安全问题,但是在JDK1.8中还是会出现一个bug,就是computeIfAbsent,下面就来详细说说死循环的原因。原创 2023-01-23 15:34:03 · 2971 阅读 · 1 评论 -
JDK1.8的HashMap死循环复现
下面聊聊JDK1.7HashMap的死循环问题,在这之前首先要知道JDK1.7的HashMap底层是数组 + 链表的形式的。原创 2023-01-23 03:21:01 · 792 阅读 · 0 评论 -
HashMap1.7中的线程安全问题
JDK1.7HashMap的死循环问题原创 2023-01-23 02:22:15 · 1421 阅读 · 0 评论 -
源码解析系列:ConcurrentHashMap(2) - put方法和扩容
这篇文章主要介绍ConcurrentHashMap的put方法和扩容的流程原创 2022-08-05 20:04:19 · 439 阅读 · 0 评论 -
源码解析系列:ConcurrentHashMap(1) - 构造方法和其他参数
ConcurrentHashMap作为面试的重点,从这篇文章开始就来尝试去解析内部的方法。对比HashMap,最大的区别就是ConcurrentHashMap是并发安全的。concurrentHashMap源码解析。文章对于树化这一些操作不会详细说明......原创 2022-08-04 19:49:12 · 519 阅读 · 0 评论 -
源码解析系列:ArrayList(4) - set、get、clear、contains、toString方法和迭代器
这一部分将会介绍源码中set、get、clear、contains、toString方法和迭代器,参考视频: ArrayList源码解析原创 2022-07-10 23:23:43 · 407 阅读 · 0 评论 -
源码解析系列:ArrayList(3) - add方法和remove方法
这一部分将会介绍源码中的add方法和remove方法原创 2022-07-07 18:23:39 · 529 阅读 · 0 评论 -
源码解析系列:ArrayList(2) - 构造方法和其他一些重要方法
这一部分主要对构造方法和里面的一些其他方法进行源码的分析原创 2022-07-07 12:16:19 · 164 阅读 · 0 评论 -
源码解析系列:ArrayList(1) - 介绍和接口实现
这个系列开始要对ArrayList进行逐步的分析,视频参考了黑马的 ArrayList 源码解析, 在分析的过程中我会尽量每一行代码都涉及到,尽可能全面地把ArrayList分析到位。ArrayList 是 Java 中的一种存储集合,底层主要使用的是数组形式来存储,对比于 HashMap,ArrayList 的整个过程是没有那么复杂的。由于 ArrayList 是由数组存储的,这就导致了 ArrayList 的一个特性就是查找快,因为数组在空间中的存储是连续的,可以通过下标索引的方式快速定位到查找的位置。原创 2022-07-06 14:59:04 · 564 阅读 · 0 评论 -
Netty学习笔记(4) Netty源码 - accept 和 read流程
文章目录前言1. nio中的accept回顾2. netty中的accept流程1. int localRead = doReadMessages(readBuf)2. pipeline.fireChannelRead(readBuf.get(i))1. childGroup.register(child).addListener(new ChannelFutureListener()3. netty 中的 read 流程前言笔记基于黑马的Netty教学讲义加上自己的一些理解,感觉这是看过的视频中挺不原创 2022-01-30 12:54:25 · 1196 阅读 · 0 评论 -
Netty学习笔记(4) Netty源码 - NioEventLoop
文章目录前言1. 了解NioEventLoop的一些要点2. selector 什么时候被创建1. eventLoop为什么有两个selector成员变量3. eventLoop的nio线程何时被启动1. 总的方法2. 重要方法-inEventLoop()流程3. 重要方法-startThread()流程4. 提交普通任务会不会结束select阻塞5. wakeUp变量的作用是什么6. 每次循环的时候,什么时候才进入SelectStrategy.SELECT分支7. 进入select分支之后会阻塞多久呢8.原创 2022-01-29 19:34:16 · 993 阅读 · 0 评论 -
Netty学习笔记(4) Netty源码 - 启动流程
文章目录前言1. nio 启动流程回顾2. 源码方法说明3. initAndRegister1. channel = channelFactory.newChannel()2. init(channel)3. ChannelFuture regFuture = config().group().register(channel)4. doBind01. doBind(localAddress)2. pipeline.fireChannelActive()前言笔记基于黑马的Netty教学讲义加上自己的原创 2022-01-28 18:46:28 · 904 阅读 · 0 评论 -
源码解析系列:HashMap(5) - c语言实现一个HashMap
文章目录1. 前言2. 开始C语言之旅1. 前言HashMap(5)中主要介绍了我的一个数据结构实验课设,而这个课设是实现一个HashMap,政整个HashMap的实现是以java JDK1.8的HashMap为参考实现的,其实说是参考,大部分其中的方法是和java源码一样的,在红黑树的方面则是自己设计的。对于这个课设,也有一些和HashMap不一样的地方,比如Key和Value都是使用int类型的,数组下标不再存放无头单链表,而是存放有头单链表,这其实都是其中一些坑,后来慢慢改成这样的。对于Ha..原创 2022-01-14 23:39:17 · 1275 阅读 · 5 评论 -
源码解析系列:HashMap(4) -红黑树的删除方面的操作
文章目录1. 前言2. 方法解析1. removeTreeNode2. untreeif3. split1. 前言HashMap(4)中介绍了HashMap中对于红黑树的一些操作,主要是remove操作,同样在这一篇中对于源码的红黑树操作不会详细介绍,在最后一篇的C语言实现HashMap中会解释红黑树的插入删除的原理这些,这篇是对这些方法的一个大概了解第一篇文章:源码解析系列:HashMap(1)第二篇文章:源码解析系列:HashMap(2)第三篇文章:源码解析系列:HashMap(3)..原创 2022-01-14 21:53:02 · 493 阅读 · 0 评论 -
源码解析系列:HashMap(3) - 树化方法
文章目录1. 前言2. 方法解析1. putTreeVal(JDK11)2. moveRootToFront3. checkInvariants1. 前言HashMap(3)中介绍了HashMap中对于红黑树的一些操作,主要是put操作,当然对于红黑树的操作的详细代码不会解释,因为源码中的变量定义不够简洁,在最后一篇的C语言实现HashMap中会解释红黑树的插入删除的原理这些,这篇是对这些方法的一个大概了解第一篇文章:源码解析系列:HashMap(1)第二篇文章:源码解析系列:HashMap..原创 2022-01-14 21:00:00 · 596 阅读 · 0 评论 -
源码解析系列:HashMap(2) - 核心方法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录1. 前言2. HashMap核心方法1. get2. containsKey3. put4. resize1. 前言HashMap(1)中介绍了一些相关的方法的原理和一些重要的参数以及四种构造方法。本文会结和上一篇文章介绍HashMap中几个常用的方法。有些地方调用了红黑树的查找,关于红黑树的方法的解析,在系列的最后会讲解。第一篇文章:https://blog.csdn.net/laohuangaa/article/deta原创 2021-12-17 15:35:09 · 1228 阅读 · 0 评论 -
源码解析系列:HashMap(1) - 常量和一些工具方法
标题前言1. 源码前的准备1.1 HashMap的存储结构1.2 什么是Hash前言 最近开始学HashMap,该系类文章对HashMap的源码进行一句一句解析,会基本包括HashMap的关键的方法,在其中有一些比较特殊的方法的时候也会单独注释讲解。本文基于jdk1.8进行源码解读。 参考视频地址:https://www.bilibili.com/video/BV1LJ411W7dP?from=search&seid=4711005967875614637&spm_id_fr原创 2021-12-16 01:33:18 · 588 阅读 · 0 评论 -
Spring容器创建过程
目录1. 流程(源码解析)2. 小结记录一下最近学的Spring容器创建过程。1. 流程(源码解析)1、AnnotationConfigApplicationContext applicationContext =new AnnotationConfigApplicationContext(ExConfig.class);public AnnotationConfigApplicationContext(Class<?>... componentClasses) { //thi原创 2021-08-20 15:07:34 · 800 阅读 · 0 评论 -
ApplicationListener使用和发布原理
目录1. 演示2. 实现原理2.1 ContextRefreshedEvent大概流程2.2 applicationContext.publishEvent()大概流程2.3 ContextClosedEvent大概流程2.4 细节一:如何获取派发器2.5 细节二:容器如何获取所有监听器2.6 总结流程记录最近看视频学到的AppiicationListener的原理ApplicationListener是用于容器初始化之后调用,如果想要在IOC容器创建完bean之后或者容器关闭的时候做一些操作,就可以用原创 2021-08-18 11:35:12 · 907 阅读 · 0 评论 -
springboot拦截器使用和源码分析
目录1. 使用拦截器1. 1 编写自己的拦截器1.2 在配置类中添加拦截器1.3 编写一个测试的controller1.4 测试运行结果2. 源码分析2.1 doDispatch大致源码2.2 三个拦截器方法2.2.1 applyPreHandle2.2.2 applyPostHandle2.2.3 triggerAfterCompletion2.2.4 其他补充2.3 总结1. 使用拦截器拦截器可以对某一个请求进行拦截,比如在登陆的时候可以拦截检测是否符合条件。又比如在用户访问网页主页的时候使用拦截器原创 2021-08-12 03:20:22 · 258 阅读 · 0 评论