
java源码分析专栏
文章平均质量分 81
介绍分析jdk以及主流框架的源码
有梦想的打工仔
这个作者很懒,什么都没留下…
展开
-
java并发与多线程(三)--线程池原理解析
原文链接:原文一:简述本文基于java11对线程池的参数,执行任务的流程以及原理进行解析,并且对线程池关键性源码进行了分析。二:线程池的参数1. corePoolSize: 用于定于线程池的核心线程数量2. maximumPoolSize: 用于定义线程的最大线程数3. keepAliveTime: 非核心线程的空闲时间4. timeUnit: 空闲时间单位5. blockingQueue: 阻塞队列6. threadFactory: 线程工厂,可以用于定义线程的名称,线程的优先级,是否原创 2022-01-01 23:08:26 · 407 阅读 · 0 评论 -
java并发与多线程(二)--concurrentHashMap源码分析
一:简述本文基于jdk1.8对concurrentHashMap的源码进行分析,以put()方法为入口对concurrentHashMap的扩容机制,size计算方式等代码进行分析二:concurrentHashMap成员变量//最大容量private static final int MAXIMUM_CAPACITY = 1 << 30;//默认容量大小private static final int DEFAULT_CAPACITY = 16;//负载因子private原创 2022-01-01 23:01:06 · 520 阅读 · 0 评论 -
Java并发与多线程(一)--线程基础知识
转载地址:原文一:简述Java并发与多线程专栏的第一篇文章,主要介绍java多线程的一些基础知识。二:java的线程状态public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread原创 2022-01-01 22:52:14 · 301 阅读 · 0 评论 -
mybatis中一个查询方法的执行流程
一:简述本文通过分析mybatis的源码来展示mybatis是如何帮我们实现一个查询的方法的。二:时序图三:源码分析 UserMapper mapper = sqlSession.getMapper(UserMapper.class);注:这里获取的是一个代理对象,而我们一般从Spring容器中获取的也是同样的代理对象,只不过是交给Spring管理了而已)1.获取代理类MappersqlSession的getMapper()方法会先调用configuration的getMap原创 2021-12-22 23:33:11 · 1131 阅读 · 0 评论 -
Mybatis源码解析之配置文件的解析
一:简述:本篇文章主要用于介绍关于mybatis配置解析的部分代码。二:时序图三:代码分析因为构建SqlSessionFactory需要读取用户的配置来构建,所以解析配置文件必然是在构建SqlSessionFactory之前进行的,所以这部分源码的入口应该是在SqlSessionFactoryBuilder中的build()方法。 //开始对读取的配置文件进行解析 XMLConfigBuilder parser = new XMLConfigBuilder(inputStr原创 2021-12-09 00:28:42 · 257 阅读 · 0 评论 -
mybatis插件自定义及原理
一:概述mybatis插件可以帮我们对mybatis的四大对象进行拦截处理,要使用好插件,我们需要先了解四大对象的作用,这样才能根据需求定义插件。二:mybatis的四大对象1.Executor:负责调用StatementHandler操作数据库,以及二级缓存的处理(使用CachingExecutor进行包装)定义插件可以修改原生sql2.StatementHandler:负责sql脚本的执行以及mybatis一级缓存的处理,定义插件可以修改原生的sql,例如分页插件,数据权限等3.Param原创 2021-12-04 23:56:49 · 621 阅读 · 0 评论 -
LinkedList源码分析(jdk1.8)
一:LinkedList的继承体系LinkedList和ArrayList一样实现了List,Serializable,Cloneable接口,另外它还继承了AbstractSequentialList类和Deque接口。AbstractSequentialList类:在遍历LinkedList的时候,官方更推荐使用顺序访问,也就是使用我们的迭代器。因为LinkedList底层是通过一个双向链表来实现的,虽然LinkedList也提供了通过索引查询的方法,但是底层的实现是:每次调用get(int in原创 2021-04-17 14:10:55 · 128 阅读 · 0 评论 -
ArrayList源码分析
一:ArrayList的继承体系ArrayList继承自AbstractList并实现了List,RandomAccess, Cloneable, Serializable接口等接口注:1.RandomAccess是一个标记接口,用来表明其支持快速(通常是固定时间)随机访问2.Cloneable接口也是一个标记接口,用来表示其支持clone3.Serializable接口,标记接口,表示支持序列化二:ArrayList的成员变量分析 // 默认初始化大小 private stat原创 2021-03-28 17:42:25 · 123 阅读 · 0 评论 -
Nacos源码分析之Raft协议(三)----数据的同步
前言上两篇文章主要分析了leader选举以及发送心跳包的代码,如果还有疑问的小伙伴,可以点击传送门再去温习一下。leader选举源码分析leader发送心跳源码分析接下来进入正题,今天我们主要是分析上篇文章没有说完的数据同步相关的代码。Nacos数据一致性代码分析...原创 2020-10-24 11:01:57 · 948 阅读 · 0 评论 -
Nacos源码分析之Raft协议(二)----心跳包发送
上篇文章原创 2020-10-12 23:16:28 · 802 阅读 · 0 评论 -
Nacos源码分析之Raft协议(一)----Leader选举
Nacos一致性协议分布式一致性协议有很多,例如Paxos协议,Zab协议,Raft协议,而Nacos采用的是Distro协议和Raft协议。对于非临时数据,Nacos采用的是Raft协议,而临时数据Nacos采用的是Distro协议。简单说一下Distro,Distro协议被定位为临时数据的一致性协议:该类型协议不需要把数据存储到磁盘或者数据库,因为临时数据通常和服务器保持一个session会话,该会话只要存在,数据就不会丢失。本篇文章主要针对于CP的Raft算法。Raft协议Raft协议是一种强一原创 2020-10-11 15:45:00 · 1871 阅读 · 1 评论