- 博客(7)
- 资源 (1)
- 收藏
- 关注
原创 SpringMvc源码分析和手写Mvc
先简单看下代码结构,springmvc是springframework的子项目,gradle中只依赖了外部的servlet,且是provided,我将他理解成纯粹的基于servlet的web框架servlet的核心在于网络请求的分发,可以理解成web请求的uri和具体的处理方法的映射关系,可以按照流程划分成两部分,一部分做映射关系的初始化,另一部分是根据具体的http请求找到处理的方法,反射执行,返回结果。springframework 5.0.x那么springmvc核心就是继承HttpS
2020-10-09 14:44:33
515
原创 MybatisPlus 分布式Id
对于分布式id,有很多方案,现在大多数用的是基于雪花算法snowflake的实现,美团有leaf,百度有uid-generator,我这里记录下苞米豆在MybatisPlus3中的分布式id实现简单介绍下雪花算法雪花算法也叫雪花id,是一个64bit的整型数据,原生的snowflake是这样的:最高位不用,41bit保存时间戳,单位是毫秒,10bit的机器位,12bit的唯一序列号,可以理解是某一毫秒内,某台机器生成了不重复的序列号10bit 一般一会分为5bit的datacen
2020-08-09 22:12:24
3450
2
原创 源码分析ThreadLocal
ThreadLocal是一种变量类型,根据当前的线程,变量的value也会不一样,也可以理解成每个线程内都有一个变量的副本,很多人说ThreadLocal就是一个key为线程的map,看了下源码,我是这样理解的(可以看下jdk8的官方文档 https://docs.oracle.com/javase/8/docs/api/index.html)public class ThreadLocal<T> { public T get() {...} public void set
2020-07-16 16:28:15
569
原创 多数据源@DS和@Transactional
考虑到业务层面有多数据源切换的需求,同时又要考虑事务,我使用了Mybatis-Plus3中的@DS作为多数据源的切换,它的原理的就是一个拦截器@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable { try { DynamicDataSourceContextHolder.push(determineDatasource(invocation)); return invocati
2020-05-13 11:27:42
23925
24
原创 Java IO模型(一)
本篇博客分析Java中BIO NIO AIO和Netty模型先来理解几个概念,同步与异步,阻塞与非阻塞依然是烧水的例子,A去烧水,等待水开过程中A什么都不做,只等待,那就是阻塞;可以干别的,那就是非阻塞;水开之后,是否还是A来操作?依然是A操作,同步;换了B来操作,异步。1.BIO Blocking-IOBIO是阻塞的,它的阻塞体现在很多地方 例如下面的acceptp...
2020-04-04 19:56:19
152
原创 ReentrantLock源码解析(二)
本篇博客深入源码分析 ReentrantLock 解锁过程解锁相对于加锁,没有很复杂,这里要结合加锁时的阻塞位置,完整整个流程public void unlock() { sync.release(1);}lock中的state记录锁的状态,加锁或者重入 state+1,那么解锁就是-1;所以整个解锁过程会有两种情况,state=1和state>1 重入...
2020-04-02 18:26:23
222
原创 ReentrantLock源码解析(一)
本篇博客深入源码分析 ReentrantLock 加锁过程ReentrantLock可以实例化两种锁,FairSync和NonfairSyncReentrantLock lock = new ReentrantLock(true);lock.lock();本篇以公平锁为例ReentrantLock.javafinal void lock() { acquire...
2020-04-02 01:21:31
1109
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人