原创 I/O 多路複用之select、poll、epoll實現原理及對比總結

select,poll,epoll都是IO多路複用的機制。I/O多路複用就是通過一種機制,一個進程可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作。但select,poll,epoll本質上

原创 Activiti工作流樣例教程(請假-審批流程並向用戶展示工作流實時過程圖)

1 配置工作流。 啓動activiti-explorer並登錄。(用戶名:kermit;密碼:kermit) 選擇 流程->流程設計工作區->新建模型 輸入流程名稱進入流程設計界面,繪製流程圖: 給事件和活動添加ID,並給活動

原创 Java Cache Line 僞共享及解決方案

僞共享問題本質: 多個變量被cpu加載在同一個緩存行中,當在多線程環境下,多個變量被不同的cpu執行,導致緩存行失效而引起的大量的緩存命中率降低。 緩存一致性協議MESI協議中,每個CPU的Cache控制器不僅知道自己的讀寫操作,而且也監

原创 ThreadLocal 源碼分析

簡介 ThreadLocal線程局部變量,使得各線程能夠保持各自獨立的一份對象。通常被定義爲類的靜態類變量。 ThreadLocal類本身定義了有get(), set(), remove()和initialValue()方法。前面三個方法

原创 JUC - Semaphore 源碼分析

簡介 Semaphore,信號量。用於控制同時訪問特定資源的線程數量,來保證合理的使用特定資源。比如:有10個數據庫連接,有30個線程都需要使用連接,Semaphore可以控制只有10個線程能夠獲取連接,其他線程需要排隊等待,當已經獲取到

原创 JUC - ReentrantLock 源碼分析

簡介 ReentrantLock,一個可重入的獨佔鎖 Lock,它具有與使用 synchronized 方法和語句所訪問的隱式監視器鎖相同的一些基本行爲和語義,但功能更強大。 源碼分析 ReentrantLock的實現方式是在內部定義了一