原创 JUC源碼分析-FutureTask,CompletionService

FutureTask 的幾個關聯方法 <T> Future<T> submit(Callable<T> task); <T> Future<T> submit(Runnable task, T result); <T> Future<T>

原创 JUC源碼分析-輔助類-Phaser

概述 Phaser 是一個同步輔助類,與CyclicBarrier和CountDownLatch功能相似,用於柵欄條件的相互等待,支持更豐富的用法, 可以將一個的程序的等待分爲多個階段。 主狀態分爲 4部分,1~16位 未到達者數,17~

原创 JUC源碼分析-容器-ConcurrentHashMap

概述 HashMap是線程不安全的map, ConcurrentHashMap 是線程安全的map,並能適應高併發的場景。 核心屬性和數據結構 final int segmentMask; final int segmentShift;

原创 JUC源碼分析-容器-ConcurrentLinkedQueue

概述 ConcurrentLinkedQueue 是單向鏈表結構的無界併發隊列。從JDK1.7開始加入到J.U.C的行列中。使用CAS實現併發安全,元素操作按照 FIFO (first-in-first-out 先入先出) 的順序。適合“

原创 JUC源碼分析-容器-ConcurrentSkipListMap和ConcurrentSkipListSet

概述 ConcurrentSkipListMap:線程安全的有序Map,TreeMap是線程不安全的有序Map. 數據使用表單項鍊表存儲,它藉助一種跳錶(Skip Lisy)的數據結構,可簡單理解爲 附加的索引,後面有詳細分析。 Conc

原创 JUC源碼分析-容器6-SynchronousQueue

概述 沒有容量的阻塞隊列,它的每個插入操作都要等待其他線程相應的移除操作,反之亦然。 SynchronousQueue(後面稱SQ)內部沒有容量,所以不能通過peek方法獲取頭部元素;也不能單獨插入元素,可以簡單理解爲它的插入和移除是“一

原创 JUC源碼分析7-輔助類-Phaser

概述 Phaser 是一個同步輔助類,與CyclicBarrier和CountDownLatch功能相似,用於柵欄條件的相互等待,支持更豐富的用法, 可以將一個的程序的等待分爲多個階段。 主狀態分爲 4部分,1~16位 未到達者數,17~

原创 JUC源碼分析6-輔助類-CountDownLatch,Semaphore,CyclicBarrier,Exchanger

本文分析併發輔助類 CountDownLatch,Semaphore,CyclicBarrier,Exchanger CountDownLatch 同步輔助類 實現一個線程 等待其他1~N個線程執行完成,再繼續執行其他代碼。 構造方法 跟

原创 JUC源碼分析-讀寫鎖-ReentrantReadWriteLock

概述 ReentrantReadWriteLock 有2個鎖,讀鎖和寫鎖。讀讀不加鎖,讀寫,寫讀,寫寫都加鎖。 讀鎖是共享鎖,寫鎖是排他鎖。 讀鎖和寫鎖的狀態值被保存在int的值中,前16位表示 共享讀鎖狀態值,後16位表示排他寫鎖狀態值

原创 dubbo源碼分析-consumer訂閱創建代理

訂閱創建代理的第一部分 紅框之前的部分已經分析過,本文分析紅框內的部分。     private <T> Invoker<T> doRefer(Cluster cluster, Registry registry, Class<T> ty

原创 redis5.0源碼淺析(六)-壓縮列表

聲明:本文中的註解 zltail ,zlend都是參照 《Redis設計與實現》的結構命名,並且理解本文章的前提 也是 理解 書中壓縮列表部分。   本文主要分析 初始化方法和插入方法 //獲取prevlensize值 //根據ptr[0

原创 netty源碼分析3-NioServerSocketChannel,NioSocketChannel

本文分析內容如下 Channel主要接口分析 AbstractChannel分析 AbstractNioChannel分析 AbstractNioByteChannel分析 AbstractNioMessageChannel 分析 Nio

原创 redis5.0源碼淺析(二)-鏈表

鏈表 鏈表的實現比較簡單,容易理解 鏈表提供了高效的節點重排能力, 以及順序性的節點訪問方式, 並且可以通過增刪節點來靈活地調整鏈表的長度 每個鏈表節點使用一個 adlist.h/listNode 結構來表示: //adlist.h -

原创 redis5.0源碼淺析(一)-sds

sds調試   sds.c有一個 sdsTest(),裏面有sds的單元測試。 src目錄下的 make有如下 test-sds: sds.c sds.h $(REDIS_CC) sds.c zmalloc.c -DSDS_TEST_MA

原创 netty源碼分析2-2-NioSocketChanel初始化

本文分享內容 初始化NioSocketChannel 初始化NioSocketChannel 當客戶端發起連接時,服務端建立與客戶端的連接的過程,實際上就是NioSocketChanel初始化的過程。   這個過程依賴NioMessage