包含标签 Java 的文章

MyBatis 源码 - Plugin 插件实现过程

MyBatis 的执行过程中主要涉及四个很重要的接口,分别是 Executor、ParameterHandler、ResultSetHandler 和 StatementHandler,为了方便用户在上述接口执行过程中植入增强逻辑,MyBatis 实现了插件支持,即用户可以定义对上述接口的方法拦截逻辑,MyBatis 将通过动态代理将这里逻辑植入到具体接口方法的执行过程中。

……

阅读全文

MyBatis 源码 - Mapper 的动态代理实现过程

在使用 Mabatis 时往往需要有成对出现的 .java 后缀格式 Mapper 接口文件及 .xml 后缀格式的 XML 文件,其中 XML 文件放在资源目录,而 Java 文件自然放在运行目录,通过调用 Mapper 接口中定义的方法就能触发到其通过 namespace 关联的 XML 文件中的 SQL 语句,从而实现了业务逻辑与数据库交互的解耦,避免像传统 JDBC 编程那样在 Java 代码中写 SQL 与数据库交互,那么 Mybtis 是怎么将 Mapper 接口方法与 XML 中 SQL 语句进行绑定与触发的呢?下面我们通过测试方法 debug 调试进行进行代码跟踪。

……

阅读全文

JDK 源码 - ThreadPoolExecutor

ThreadPoolExecutor 是 Java 的线程池实现,其中封装了对线程的管理(包括创建、调度、销毁等)及任务的分配等逻辑,作为核心并发组件,其中使用到了如阻塞队列、ReentrantLock、原子变量等并发包下的基础工具,由于前面看完了 ReentrantLock 等相关的源码,所以尝试窥探下 ThreadPoolExecutor 的工作过程。

……

阅读全文

JDK 源码 - ConcurrentHashMap 1.7

由于 JDK 1.7 的 ConcurrentHashMap 的实现使用到了 ReentrantLock,刚好前面也已经看过了 ReentrantLock 的实现,所以顺势看下 1.7 版本的 ConcurrentHashMap 是如何实现的。

……

阅读全文

JDK 源码 - CountDownLatch

前面已经了解了 AbstractQueuedSynchronizer 和 ReentrantLock 的原理,接下来看看共享锁组件 CountDownLatch 是如何基于 AbstractQueuedSynchronizer 实现,在我看来,如果能先了解 AbstractQueuedSynchronizer 的运作过程,那么再看 CountDownLatch 会觉得比较容易理解。

……

阅读全文

JDK 源码 - ReentrantLock

前面已经或粗或细地看过了 AbstractQueuedSynchronizer 的源码,不妨趁热打铁把其常见的实现的源码也翻一遍,于是我们先来看 ReentrantLock 内部是怎么实现的。

……

阅读全文

JDK 源码 - AbstractQueuedSynchronizer

前段时间线上遇到 OOM 问题,定位到的原因是线程池创建线程的个数过多,导致内存不够用;为此好奇去看了眼线程池的源码,发现线程池会在调度任务执行时才会创建实际的线程对象,但是再往下看时遇到了不懂的东西,比如 AbstractQueuedSynchronizer ,没办法只好先把基础的组件搞明白。

……

阅读全文

聊聊多线程环境下的 HashMap

很久之前我写了这么一个并发异步的工具方法,传入的 suppliers 是具体的业务方法函数引用,考虑这个一个业务场景,我们需要去数据库统计某个表最近一个月在某个条件下的数量,那么为了提高响应效率,可以通过按天切分日期,然后组装成相应的 supplier,再通过多线程异步处理,最后统一收集完结果返回。

……

阅读全文

记一次在实际项目中的策略设计模式应用

最近在实际项目中遇到一个需求,背景是系统中有几张表使用了 longtext 类型的字段 extend_info 储存用户的一些比如电话号码、下单地址等敏感信息,出于对信息安全的考虑,该需求需要新增一个 extend_info_cipher 字段并进行加解密操作,不过由于涉及的数据量较大,目前大致可分为四个阶段进行增量覆盖,每个增量递进通过参数配置触发:

……

阅读全文

写给黑客的 Java 编译器不完全指南

我的毕业设计做的是一个在线集成开发环境,我给它取了个名字,叫 olycode,意思大概是online coding。截止目前,它支持在线运行 Java、Python 和 Lua 代码,该项目现在运行在我的服务器上,可以点 传送门 过去玩玩,完整的工程代码也已经上传到了 Github,感兴趣的朋友可以点 这里 去看看。

……

阅读全文