原创 Java併發Concurrent包——ConcurrentHashMap原理分析

ConcurrentHashMap 和 HashMap 的底層實現都是 數組+鏈表或紅黑樹 構成的。 HashMap 的源碼分析見:Java集合框架——HashMap源碼分析 ConcurrentHashMap 相比 HashM

原创 Java併發Concurrent包的鎖(四)——讀寫鎖源碼分析

本文對讀寫鎖源碼進行了比較詳細的分析。 另外可以參考可重入鎖 ReentrantLock 的分析:Java併發Concurrent包的鎖(三)——ReentrantLock源碼分析 ReadWriteLock接口 ReadW

原创 Java併發Concurrent包——ConcurrentLinkedQueue源碼分析

ConcurrentLinkedQueue 是併發中的高性能隊列,而 BlockingQueue 接口下的是併發的阻塞隊列。 ConcurrentLinkedQueue 是一個基於鏈接節點的無界線程安全隊列。此隊列按照 FIFO

原创 Java併發Concurrent包的鎖(七)——Semaphore源碼分析及使用

Semaphore 通常用於限制可以訪問某些資源(物理或邏輯的)的線程數目。信號量維護了一個許可集。如有必要,在許可可用前會阻塞每一個 acquire(),然後再獲取該許可。每個 release() 添加一個許可,從而可能釋放一個

原创 Java併發Concurrent包的鎖(二)——自旋/阻塞/可重入

Java 併發包 Concurrent 的包結構共可分爲五個部分: - 原子變量類 - 鎖 - collection併發集合框架 - excutor線程池 - 同步工具 本文介紹鎖的一些原理和特徵,比如自旋,阻

原创 Java併發Concurrent包的鎖(三)——ReentrantLock源碼分析

ReentrantLock 提供了兩個構造函數,默認是非公平鎖的構造函數,還有一個公平鎖的構造函數。 可以參考: Java併發Concurrent包的鎖(二)——自旋/阻塞/可重入 ReentrantLock 類中的公平和非公平

原创 Java併發Concurrent包的原子類

Java 併發包 Concurrent 的包結構共可分爲五個部分: - 原子類 - 鎖 - collection併發集合框架 - excutor線程池 - 同步工具 本文介紹各種原子類。 主要有原子變量類,原子數組類,

原创 Java併發Concurrent包的鎖(六)——CountDownLatch源碼分析及使用

CountDownLatch 和 CyclicBarrier 比較相似,都屬於併發的實用工具類。 CyclicBarrier 的源碼分析和使用可以參考:Java併發Concurrent包的鎖(五)——CyclicBarrier源

原创 Java併發Concurrent包的鎖(五)——CyclicBarrier源碼分析及使用

CyclicBarrier 是一個同步輔助類,它允許一組線程互相等待,直到到達某個公共屏障點 (common barrier point)。在涉及一組固定大小的線程的程序中,這些線程必須不時地互相等待,此時 CyclicBarri

原创 Java併發Concurrent包——Callable/Future/FutureTask解析

Runnable 接口,由於是 void 方法,是沒有返回結果的,在併發包中,有 Callable 類,能夠得到執行的結果。 Callable 返回結果並且可能拋出異常的任務。實現者定義了一個不帶任何參數的叫做 call 的方法。

原创 Java併發Concurrent包——CopyOnWriteArrayList源碼分析

CopyOnWriteArrayList 和 ArrayList 比較相似,只不過 CopyOnWriteArrayList 是線程安全的。 當進行寫操作時,將原來的數組複製一份新的數組,寫操作在這個新數組上進行;此時不影響舊數

原创 Java併發Concurrent包的鎖(一)——Lock接口

Java 併發包 Concurrent 的包結構共可分爲五個部分: - 原子類 - 鎖 - collection併發集合框架 - excutor線程池 - 同步工具 本文介紹 Lock 接口和其與 synchr

原创 Java併發Concurrent包——ThreadPoolExecutor線程池源碼分析

ThreadPoolExecutor 就是常用的線程池,下面通過其中重要的源碼來分析: 線程池的狀態 由下邊的源碼,可以得知,線程池由一個32位的 int 型來表示狀態。其中高位的 3 位代表 5 種狀態,低位的 29 位代表工作

原创 Java併發Concurrent包——ArrayBlockingQueue源碼分析

ArrayBlockingQueue 是一個由數組支持的有界阻塞隊列。此隊列按 FIFO(先進先出)原則對元素進行排序。 BlockingQueue 接口實現的都是阻塞隊列。而 ConcurrentLinkedQueue 是基於

原创 配置slf4j/log4j輸出到不同的文件

在實際中,我們可能想要將不同類型的日誌分類輸出到不同的文件中。 關於 log4j 的配置參數解釋可以參考: slf4j使用log4j的配置參數: https://blog.csdn.net/yx0628/article/details