brade Blog

To maintain the life of a human being, is his career.
维持一个人的生命的事物,是他的事业。

disruptor源码分析

disruptor 启动流程 本文中 disruptor 使用的版本为 3.4. 具体可以查看 Github . 1 关于 disruptor 英国外汇交易公司LMAX开发的一个高性能的异步处理队列, 研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级). 单线程能支撑每秒600万订单, 2010年在QCon演讲后,获得了业界关注. ...

Undertow源码解析之启动流程

undertow 启动流程 本文中 Undertow 使用的版本为 2.2.14.Final. 具体可以查看 Github 或者 官网 . 1 关于 Undertow Undertow 是一个用 java 编写的灵活的高性能 Web 服务器, 提供基于 NIO(XNIO) 的阻塞和非阻塞 API. Undertow 具有基于组合的架构, 允许通过组合小型单一用途处理程序来...

xnio源码解析之启动流程

XNIO 启动流程 本文中 XNIO 使用的版本为 3.8.4.Final. 1 什么是 XNIO JBOSS 开源的一个以 NIO 思想为基础的异步 IO 框架. 与 netty 类似,只是使用 ChannelListener 进行事件通知 . 同时 XNIO 继承重用了JDK NIO 的 ByteBuffer类; XNIO 通过封装 NIO 的 FileChanne...

springboot源码解析之启动流程

springboot 源码解析 本文中 springboot 采用的版本为 2.5.6. 1.1 @SpringBootApplication 注解 标注此注解的类,是 SpringBoot 主配置类, SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用. 注解定义如下: @Target({ElementType.TYPE}) @Rete...

tomcat源码解析之Bootstrap启动流程

tomcat 源码解析 本文中 tomcat 采用的版本为 10.0.12。 1. bootstrap 启动 1.1 静态块获取 catalina.base 变量值 ; 1.2 调用 Bootstrap.main() , 里面再调用 init() , setAwait(true) ,load() , start() . 2. 具体启动流程 2.1 init() ...

docker搭建常用开发环境

docker 搭建常用开发环境 docker 环境初始化 1. 安装常用工具 本文采用 centos7 的 linux环境 , 直接使用 VM ware workstation 创建虚拟机 ; 因为用于开发环境 , 都是单机部署 . yum -y install curl net-tools vim 2. 安装 docker , 采用的阿里云源 yum install...

AQS-AbstractQueuedSynchronizer源码解析

AQS 是什么? AQS(AbstractQueuedSynchronizer):抽象队列同步器,用来构建锁或者其他同步组件的基础框架。 它使用了一个int成员变量表示同步状态 ```java /** 同步状态 The synchronization state. */ private volatile int...

Linux环境Redis分布式集群部署

Linux环境Redis分布集群部署 本文中采用的redids版本为6.0.0,是稳定版,偶数的版本号表示稳定的版本。Linux是centos7. 下载安装 redis 下载 直接从 官网 进行下载上传到服务器或者直接命令下载。 这里采用的命令下载: wget http://download.redis.io/releases/redis...

Redis分布式锁

redisson源码解析

Redis 分布式锁 本文中采用的 redisson 版本使用的 3.16.1 。 setnx + expire + lua setnx + expire 负责加锁。 lua 用来解锁,如果直接用 del 命令直接释放锁,会把其它进程获取到的锁删除, 如果 get + del,也需要分2次执行,也无法保证原子性。 SETNX 是SET if Not eXists 的简写, ...

HashMap扩容机制

HashMap源码解析

HashMap 扩容机制 HashMap 数据结构 本文所用 JDK 版本为 1.8 。 map.put(k,v) 实现原理。 首先将k,v封装到Node对象当中(节点)。 然后它的底层会调用K的hashCode()方法得出hash值。 通过哈希表函数/哈希算法,将hash值转换成数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上...