原创 Java多線程 - Exchanger原理和示例

1. 簡介 Exchanger——交換器,是JDK1.5時引入的一個同步器,從字面上就可以看出,這個類的主要作用是交換數據。 Exchanger有點類似於CyclicBarrier,我們知道CyclicBarrier是一個柵欄,到達柵欄的

原创 Java多線程 - ReentrantReadWriteLock讀寫鎖詳解

1. 讀寫鎖簡介 現實中有這樣一種場景:對共享資源有讀和寫的操作,且寫操作沒有讀操作那麼頻繁。在沒有寫操作的時候,多個線程同時讀一個資源沒有任何問題,所以應該允許多個線程同時讀取共享資源;但是如果一個線程想去寫這些共享資源,就不應該允許其

原创 算法 - 排序 - 桶排序

1. 簡介 桶排序(Bucket sort)是計數排序的升級版。它利用了函數的映射關係,高效與否的關鍵就在於這個映射函數的確定。 工作原理:假設輸入數據服從均勻分佈,將數據分到有限數量的桶裏,每個桶再分別排序(有可能再使用別的排序算法或是

原创 Java容器 - 阻塞隊列(BlockingQueue)的實現原理

1. 簡介  阻塞隊列 (BlockingQueue)是Java util.concurrent包下重要的數據結構,BlockingQueue提供了線程安全的隊列訪問方式:當阻塞隊列進行插入數據時,如果隊列已滿,線程將會阻塞等待直到隊列非

原创 算法 - 排序 - 希爾排序

1. 原理 希爾排序是希爾(Donald Shell)於1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的一個更高效的版本,也稱爲縮小增量排序,同時該算法是衝破O(n2)的第一批算法之一。它與插入排序的

原创 Java多線程 - Condition的實現原理

1. 概述 之前我們介紹AQS的時候說過,AQS的同步排隊用了一個隱式的雙向隊列,同步隊列的每個節點是一個AbstractQueuedSynchronizer.Node實例。 Node的主要字段有: waitStatus:等待狀態,所有的

原创 Java容器 - ArrayList詳解

1. 簡介 ArrayList是一個數組隊列,相當於動態數組。與Java中的數組相比,它的容量能動態增長。 ArrayList類聲明如下: public class ArrayList<E> extends AbstractList<E

原创 算法 - 排序 - 堆排序

1. 簡介 堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱爲大頂堆;或者每個結點的值都小於或等於其左右孩子結點的值,稱爲小頂堆。 堆通常是一個可以被看做一棵樹的數組對象。堆總是滿足下列性質: 1.堆中某個節點

原创 Java多線程 - 線程池詳解

1. 優勢 線程池的用處:原來是100個任務要有100個線程來執行任務,現在是100個任務我們只要幾個線程就可以執行任務了。 一個整合:ThreadPoolExecutor繼承了AbstractExecutorService繼承了Exe

原创 算法 - 排序 - 計數排序

1. 原理 計數排序不是基於比較的排序算法,其核心在於將輸入的數據值轉化爲鍵存儲在額外開闢的數組空間中。 作爲一種線性時間複雜度的排序,計數排序要求輸入的數據必須是有確定範圍的整數。 計數排序(Counting sort)是一種穩定的排序

原创 Java多線程 - wait、notify和notifyAll 詳解

1、wait()、notify/notifyAll() 方法是Object的本地final方法,無法被重寫。 2、wait()使當前線程阻塞,前提是 必須先獲得鎖,一般配合synchronized 關鍵字使用,即,一般在synchroni

原创 Java容器 - ConcurrentLinkedQueue詳解

1. 簡介 Doug Lea在實現ConcurrentLinkedQueue時,並沒有利用鎖或底層同步原語,而是完全基於自旋+CAS的方式實現了該隊列。回想一下AQS,AQS內部的CLH等待隊列也是利用了這種方式。 由於是完全基於無鎖算法

原创 Java的Unsafe類

1、Unsafe類介紹 Unsafe類使Java擁有了像C語言的指針一樣操作內存空間的能力,同時也帶來了指針的問題。過度的使用Unsafe類會使得出錯的機率變大,因此Java官方並不建議使用的,官方文檔也幾乎沒有。Oracle正在計劃從J

原创 Java多線程 - ReentrantLock實際開發中的應用場景

1. 公平鎖,線程排序執行,防餓死應用場景 公平鎖原則必須按照鎖申請時間上先到先得的原則分配機制場景; 1).實現邏輯 上(包括:軟件中函數計算、業務先後流程;硬件中操作實現中順序邏輯)的順序排隊機制的場景; 軟件場景:用戶交互View中

原创 Java多線程 - Fork/Join框架原理解析

1、概述 Fork/Join Pool採用優良的設計、代碼實現和硬件原子操作機制等多種思路保證其執行性能。其中包括(但不限於):計算資源共享、高性能隊列、避免僞共享、工作竊取機制等。本文(以及後續文章)試圖和讀者一起分析JDK1.8中Fo