原创 Java併發——深入 ThreadPoolExecutor 任務執行原理

1 Executor 它用於執行指定的任務,把任務提交與任務執行分離,程序員不需要關注線程的管理,以及任務的執行。 ExecutorService 接口對 Executor 接口提供更多的擴展,ThreadPoolExecuto

原创 Java併發——深入 ReadWriteLock 原理

ReadWriteLock 背後維護着一對相互關聯的鎖,一個用於讀,一個用於寫。讀鎖可以被多個讀線程併發獲取, 只要沒有寫線程。而寫鎖不支持此種情況。讀寫鎖,讀-讀能共存,讀-寫不能共存,寫-寫不能共存。 自實現 如果某個線

原创 Java併發——別再問 ReentrantLock 的原理了

說到併發,我們會馬上想到鎖,使用鎖來保證各線程之間能夠安全訪問臨界區以及非線程安全的數據。 那爲啥 Java 要提供另一種機制呢?難道 synchronized 關鍵字不香嗎?嗯,它確實在有些場景 不是那麼香,從而迫切需要提供一

原创 Mybatis 源碼分析:Mapper 解析過程

在上一篇文章中我們已經知道了 SqlSessionFactory 對象的過程,但是沒有具體對 XMLConfigBuilder 類的 parse() 方法進行講解,那麼此次就通過了解 mapper 的解析過程來順便把 parse(

原创 Mybatis 源碼分析:SqlSessionFactory 的創建過程

最近工作不忙,上班時間看了下 mybatis 源碼,學習學習… 我們要使用 mybatis,就必須得有 SqlSession 對象,它是 mybatis 的核心接口,它提供了執行 sql 、獲取 mapper 和管理事物的功能。而

原创 Spring 源碼閱讀(三):自定義標籤解析原理

在很多情況下,我們需要爲系統提供可配置化支持。因此 spring 提供了可擴展 schema 的支持,擴展spring 自定義標籤配置大致需要以下幾個步驟: 創建一個需要擴展的組件 定義一個 XSD 文件描述組件內容 創建一個文件,

原创 zookeeper 集羣搭建

假設 zookeeper 集羣規劃爲 3 臺機器(zookeeper 推薦集羣機器個數爲奇數),分別命名爲:zk1、zk2 和 zk3。 安裝 解壓 zookeeper 安裝包到 /opt/module/ 目錄下 tar

原创 Spring 源碼閱讀(二):bean 元素解析以及註冊

在上一篇文章中,我們瞭解了加載 bean 的整個過程,在最後會走入到 XMLBeanDefinitionReader 類下的 doLoadBeanDefinitions() 方法,在此之前會對 Resource 進行封裝,目的是考慮到

原创 zookeeper 源碼:客戶端連接過程

可能我們直接使用 zookeeper 的機會並不多,甚至都不會直接去使用,但是 zookeeper 作爲分佈式協調框架,在如今分佈式系統領域有着非常大的作用,很多流行框架都有使用它,如分佈式治理框架 dubbo,大數據領域中的 hba

原创 Mybatis 源碼分析:數據源與連接池

1. mybatis 數據源原理分析 mybatis 數據源 DataSource 的創建是在解析配置文件 <environment /> 元素下子元素 <dataSource /> 時創建的。配置如下: <dataSource ty

原创 Spring 源碼閱讀(一):Bean 的加載過程

在使用 Spring 的過程中,不知道大家有時候是否像我有一樣的疑問,都說 Spring 主要提供兩大機制:IoC 容器和 AOP 編程,而 IoC 容器是根本,提供控制反轉的功能,我們在使用的過程中只管聲明 bean 或使用註解的方

原创 Mybatis 源碼分析:事物管理

1. mybatis 事物概述 mybatis 使用 Transaction 接口封裝了數據庫連接 Connection 的生命週期,它由 creation、preparation、commit/rollback 和 close 組成

原创 Mybatis 源碼分析:獲取 Mapper 接口對象

我們知道使用 mybatis 作爲 ORM 框架時,想要使用面向接口的方式操作數據庫,即使用 mapper 文件形式,那麼就需要獲取 Mapper 接口對象,從而才能對數據庫進行操作。那麼問題來了,在 java 中是不可能對 inte

原创 Mybatis 源碼學習:SqlSessionFactory 的創建過程

最近工作不忙,上班時間看了下 mybatis 源碼,學習學習… 我們要使用 mybatis,就必須得有 SqlSession 對象,它是 mybatis 的核心接口,它提供了執行 sql 、獲取 mapper 和管理事物的功能。而想要

原创 Mybatis 源碼學習:Mapper 解析過程

在上一篇文章中我們已經知道了 SqlSessionFactory 對象的過程,但是沒有具體對 XMLConfigBuilder 類的 parse() 方法進行講解,那麼此次就通過了解 mapper 的解析過程來順便把 parse()