原创 多線程系列(二十一) -ForkJoin使用詳解

一、摘要 從 JDK 1.7 開始,引入了一種新的 Fork/Join 線程池框架,它可以把一個大任務拆成多個小任務並行執行,最後彙總執行結果。 比如當前要計算一個數組的和,最簡單的辦法就是用一個循環在一個線程中完成,但是當數組特別大的時候

原创 多線程系列(二十) -CompletableFuture使用詳解

一、摘要 在上篇文章中,我們介紹了Future相關的用法,使用它可以獲取異步任務執行的返回值。 我們再次回顧一下Future相關的用法。 public class FutureTest { public static void m

原创 多線程系列(十九) -Future使用詳解

一、摘要 在前幾篇線程系列文章中,我們介紹了線程池的相關技術,任務執行類只需要實現Runnable接口,然後交給線程池,就可以輕鬆的實現異步執行多個任務的目標,提升程序的執行效率,比如如下異步執行任務下載。 // 創建一個線程池 Execu

原创 多線程系列(十七) -線程組介紹

一、簡介 在之前的多線程系列文章中,我們陸陸續續的介紹了Thread線程類相關的知識和用法,其實在Thread類上還有一層ThreadGroup類,也就是線程組。 今天我們就一起來簡單的聊聊線程組相關的知識和用法。 二、什麼是線程組 線程組

原创 多線程系列(十八) -AQS原理淺析

一、摘要 在之前的文章中,我們介紹了 ReentrantLock、ReadWriteLock、CountDownLatch、CyclicBarrier、Semaphore、ThreadPoolExecutor 等併發工具類的使用方式,它們在

原创 多線程系列(十六) -常用併發原子類詳解

一、簡介 在 Java 的java.util.concurrent包中,除了提供底層鎖、併發同步等工具類以外,還提供了一組原子操作類,大多以Atomic開頭,他們位於java.util.concurrent.atomic包下。 所謂原子類操

原创 多線程系列(十五) -常用併發工具類詳解

一、摘要 在前幾篇文章中,我們講到了線程、線程池、BlockingQueue 等核心組件,其實 JDK 給開發者還提供了比synchronized更加高級的線程同步組件,比如 CountDownLatch、CyclicBarrier、Sem

原创 多線程系列(十四) -一文帶你搞懂線程池技術

一、前言 雖然 Java 對線程的創建、中斷、等待、通知、銷燬、同步等功能提供了很多的支持,但是從操作系統角度來說,頻繁的創建線程和銷燬線程,其實是需要大量的時間和資源的。 例如,當有多個任務同時需要處理的時候,一個任務對應一個線程來執行,

原创 多線程系列(十三) -一文帶你搞懂阻塞隊列

一、摘要 在之前的文章中,我們介紹了生產者和消費者模型的最基本實現思路,相信大家對它已經有一個初步的認識。 在 Java 的併發包裏面還有一個非常重要的接口:BlockingQueue。 BlockingQueue是一個阻塞隊列,更爲準確的

原创 多線程系列(十二) -生產者和消費者模型

一、簡介 在 Java 多線程編程中,還有一個非常重要的設計模式,它就是:生產者和消費者模型。 這種模型可以充分發揮 cpu 的多線程特性,通過一些平衡手段能有效的提升系統整體處理數據的速度,減輕系統負載,提高程序的效率和穩定性,同時實現模

原创 多線程系列(十一) -淺析併發讀寫鎖StampedLock

一、摘要 在上一篇文章中,我們講到了使用ReadWriteLock可以解決多線程同時讀,但只有一個線程能寫的問題。 如果繼續深入的分析ReadWriteLock,從鎖的角度分析,會發現它有一個潛在的問題:如果有線程正在讀數據,寫線程準備修改

原创 多線程系列(十) -ReadWriteLock用法詳解

一、摘要 在上篇文章中,我們講到ReentrantLock可以保證了只有一個線程能執行加鎖的代碼。 但是有些時候,這種保護顯的有點過頭,比如下面這個方法,它僅僅就是隻讀取數據,不修改數據,它實際上允許多個線程同時調用的。 public cl

原创 多線程系列(九) -ReentrantLock常用方法詳解

一、簡介 在上一篇文章中,我們介紹了ReentrantLock類的一些基本用法,今天我們重點來介紹一下ReentrantLock其它的常用方法,以便對ReentrantLock類的使用有更深入的理解。 二、常用方法介紹 2.1、構造方法 R

原创 多線程系列(八) -ReentrantLock基本用法介紹

一、簡介 在之前的線程系列文章中,我們介紹到了使用synchronized關鍵字可以實現線程同步安全的效果,以及採用wait()、notify()和notifyAll()方法,可以實現多個線程之間的通信協調,基本可以滿足併發編程的需求。 但

原创 多線程系列(六) -等待和通知模型詳解

一、簡介 在之前的線程系列文章中,我們介紹了synchronized和volatile關鍵字,使用它能解決線程同步的問題,但是它們無法解決線程之間協調和通信的問題。 舉個簡單的例子,比如線程 A 負責將 int 型變量 i 值累加操作到 1