首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 線程並發核心知識體系:從發布逃逸到同步器的完整圖譜

     編輯:Java 相關知識

對象發布與逃逸

  • 發布:使對象被外部代碼可見(存入公共靜態字段、非私有方法返回、發布內部類實例)
  • 逃逸:對象構造未完成時發布(如構造器中啟動線程導致 this 逃逸)
  • 安全發布模式:靜態初始化器、volatile/final 字段、鎖保護、線程安全容器

容器演進:同步 → 並發

類別代表特點
同步容器Vector、Hashtable、Collections.synchronizedXxx全鎖串行,吞吐低
並發容器ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue、BlockingQueue分段鎖/CAS/複製於寫,高併發吞吐

ConcurrentHashMap 亮點

  • 分段鎖(JDK7)/ CAS+synchronized(JDK8)實現高併發讀寫
  • 弱一致性迭代器:不拋 ConcurrentModificationException,可容忍遍歷時的修改
  • size()、isEmpty() 為近似值,非實時精確

CopyOnWriteArrayList 適用場景

讀多寫少、遍歷頻繁、容忍數據短暫不一致(如事件監聽器列表)。

生產者-消費者與執行框架

  • 阻塞隊列:BlockingQueue 實現解耦,put/take 可阻塞
  • Executor 框架:線程池 + 工作隊列,內部實現生產者-消費者
  • SynchronousQueue:無容量直接移交,適用線程數充足場景

任務竊取與 Fork/Join

  • 雙端隊列(Deque)支援工作竊取:各線程持有私有隊列,空閒時竊取他隊尾任務
  • 適用遞歸分治、文件遍歷等可動態拆分任務

中斷與阻塞方法協議

  • 拋出 InterruptedException ⇒ 可阻塞方法
  • 處理原則:拋出向上傳播,或捕獲後重置中斷標誌(Thread.currentThread().interrupt())

同步器三大件

同步器核心語義典型場景
Latch (CountDownLatch)一次性開關,等待多個條件就緒資源初始化完成、多服務啟動同步
Semaphore許可證計數,控制並發訪問量資源池、連接池邊界控制
Barrier (CyclicBarrier)所有線程集合點,全到才繼續,可復用多階段計算同步、選舉領導者

FutureTask 與異步計算

FutureTask 實現 RunnableFuture,可作為 Latch 使用:get() 阻塞直到計算完成。Executor 框架以此實現異步任務提交與結果獲取。

Exchanger:雙向數據交換

一種特殊 Barrier,兩線程在交換點交換數據,適用流水線傳遞、基因演算法等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved