原创 【Spring Framework】SmartInitializingSingleton解析以及使用

SmartInitializingSingleton源碼: 在Spring容器啓動時,會調用方法refresh();,然後實例化bean時: // Instantiate all remaining (non-lazy-init)

原创 【Spring Framework】BeanPostProcessor解析以及使用

在上一篇中,在實例化bean的時候,AbstractAutowireCapableBeanFactory的doCreateBean方法會這麼一行代碼: exposedObject = initializeBean(beanName,

原创 【Spring Framework】Spring源碼Bean創建及依賴注入的實現

除去lazy-init屬性來控制對bean的預實例化,通常依賴注入都是通過用戶第一次向IOC容器索要Bean時觸發的。 初始環境,定義一個Spring容器,容器中有個註解注入的類: 啓動類: public class SpringDe

原创 【Java併發】Executor框架和線程池ThreadPoolExecutor的使用

在java任務執行可以通過線程池的方式執行,java中提供了Executor框架來處理。 Executor中結構可以分爲三個模塊: 任務:實現Runnable接口或Callable接口 任務的執行:Executor接口以及Execut

原创 【Java併發】AQS四:AbstractQueuedSynchronizer內部方法分類詳細

AbstractQueuedSynchronizer作爲一個同步的基礎框架,裏面封裝了很多的方法,通過對state值的定義處理,以及排隊機制來實現同步機制。 一:state值定義 核心state狀態值,通過對其的設置獲取來判斷是否有資

原创 UML建模以及畫圖

隨着業務的發展,以及項目的擴大,項目的拆分細化,項目之間的複雜度變高,這個時候光靠人腦是很難記住所有的東西的,爲了能更快的瞭解整個的概括,需要一種圖形化的方式展示出項目的整體結構,所以UML就是一種很好的方式。 本文依賴於建模工具St

原创 【Java併發】AQS一:AbstractQueuedSynchronizer同步工具介紹

AQS提供一個框架來實現依賴於先進先出(FIFO)等待隊列的阻塞鎖和相關同步器(信號量、事件等)。該類被設計爲大多數類型的同步器的有用基礎,這些同步器依賴於單個原子 state 值來表示狀態。子類必須定義更改此狀態的受保護方法,並定義

原创 【Java併發】AQS三:AbstractQueuedSynchronizer同步基礎框架內部條件等待ConditionObject

ConditionObject條件實現AQS作爲Lock接口實現的基礎。 該類的方法文檔從鎖和條件用戶的角度描述了機制,而不是行爲規範。該類的導出版本通常需要附帶描述依賴於關聯的AbstractQueuedSynchronizer的條

原创 【Java併發】信號量閉鎖柵欄以及其工具類

信號量,閉鎖,柵欄都是java中鎖的一個實現和ReentrantLock鎖類似,只是有各自不同的特點。ReentrantLock是對唯一資源的訪問進行併發的控制。 一:信號量(Semaphore) 信號量是對有限數量的資源訪問進行併發

原创 【Java併發】CopyOnWriteArrayList寫時複製容器

Copy-On-Write簡稱COW,是一種用於程序設計中的優化策略。很多時候我們修改一個重要的文件時都會先把文件複製一份作爲備份,然後纔對原文件進行修改,這樣既可以防止修改錯誤無法恢復到原來正確的狀態,也防止計算機突然斷電造成數據不

原创 【深入理解Java虛擬機】Java虛擬機內部實現的鎖優化

高效併發是從JDK1.5到JDK1.6的一個重要改進,HotSpot虛擬機開發團隊在這個版本花費了大量的精力去實現各種鎖優化技術。 自旋鎖和自適應鎖 自旋等待不能代替阻塞,且先不說對處理器的要求,自旋等待本身雖然避免了線程切換的開銷,

原创 【深入理解Java虛擬機】Java內存模型

Java虛擬機規範中試圖定義一種Java內存模型(Java Memory Model , JMM)來屏蔽各種硬件和操作系統間存在的內存差異,以實現讓Java程序在各個平臺下都能達到一致的內存訪問效果。 Java內存模型的主要目標是定義

原创 【深入理解Java虛擬機】HotSpot虛擬機JIT編譯器

JIT編譯器(Just In Time Complier),通常在java程序通過解釋器進行解釋執行時,當虛擬機發現某個方法或者代碼塊的運行特別頻繁時,就會把這些代碼認爲是熱點代碼(Hot Spot code),虛擬機爲了提高熱點代碼

原创 【深入理解Java虛擬機】語法糖

語法糖(Syntactic Sugar),也稱爲糖衣語法,是由英國科學家發明的一個術語,指在計算機語言中添加的某種語法,這種語法對語言的功能並沒有影響,但是方便程序員的使用,通常來說,使用語法糖能夠增加程序的可讀性,從而減少代碼出錯的

原创 【深入理解Java虛擬機】方法調用之靜態分派與動態分派

靜態分派與動態分派 方法調用並不等同於方法執行,方法調用的唯一任務就是確定被調用方法的版本(即調用哪個版本),暫時不涉及方法內部的具體運行過程。因爲Class文件的編譯過程,一切方法調用在Class文件裏面存儲的都只是符號引用,而不是