『夢話高併發』J.U.C@併發包總體結構

我是豬弟,豬在我心中不是蠢的代名詞
而是懶的代名詞


微信公衆號:glmapper工做室 java

在以前的學習過程當中,發現要學的東西越學越多,Java&計算機知識體系之大,要想學完談何容易,可是總結下來,在互聯網中有三大滾輪:分佈式高併發中間件,一口氣瘦不成一道閃電,必須逐一攻破。安全

想寫高併發好久了,可是這裏面有不少東西,真滴難! 今天總算是要開篇了,回想起來真的就像作夢同樣。微信

一、併發包總體結構

先來看一下併發包的總體結構: 數據結構

併發包總體結構圖
總體結構分爲三層,先看一下頂層:

  • Lock:鎖,實現和synchronized關鍵字相同的功能和語義
  • Synchronizer:同步器,保證線程同步,就是按照預約的前後順序進行,線程同步的機制主要有:臨界區、互斥量、事件、信號量四種方式,雖然java中有許多同步器,而且功能上各不相同,但它們的內部設計上卻差異不大
  • BlockingQueue:阻塞隊列,是一個支持兩個附加操做的隊列。這兩個附加的操做是:在隊列爲空時,獲取元素的線程會等待隊列變爲非空。當隊列滿時,存儲元素的線程會等待隊列可用。阻塞隊列經常使用於生產者和消費者的場景,阻塞隊列就是生產者存放元素的容器,也是消費者獲取元素的容器
  • Executor:執行器,與線程池相關
  • 併發容器:線程安全的併發訪問容器(如:java.util.concurrent.ConcurrentHashMap等)

而後看一下中間層:多線程

  • AQS(AbstractQueueSynchronizer):抽象隊列同步器,AQS是JUC同步器的基石,AQS定義了一套多線程訪問共享資源的同步器框架,許多同步類實現都依賴於它,如經常使用的ReentrantLock、Condition 、Semaphore 、ReentrantReadWriteLock 、CyclicBarrier 、CountDownlatch
  • 非阻塞數據結構:基礎數據結構
  • 原子變量類:java.util.concurrent.atomic包下的原子變量類

而後看最底層:併發

  • volatile:保證共享變量的可見性,對單個讀/寫具備原子性,JVM底層採用「內存屏障」來實現volatile語義,禁用指令重排序,進而保證有序性
  • CAS:CompareAndSwap,一種基於硬件的樂觀鎖實現,原理是「比較交換」,保證變量操做的原子性,可是存在 ABA 的問題。

二、系列文章內容規劃

爲了防止看客們由於難以理解的底層原理以爲枯燥難懂【AQS真的挺很差理解的】,文章準備自頂而下來說述併發包的內容,而後在其中穿插一些底層的內容,最後不知不覺中底層就已經講完了。app

  • 介紹常見同步器組件(併發工具類)的用法和實踐:ReentrantLock、Condition 、Semaphore 、ReentrantReadWriteLock 、CyclicBarrier 、CountDownlatch 、Phaser 、Exchanger
  • 介紹CAS、CLH鎖和AQS原理
  • 併發工具類源碼分析:ReentrantLock、Condition 、Semaphore 、ReentrantReadWriteLock 、CyclicBarrier 、CountDownlatch 、Phaser 、Exchanger
  • 併發容器源碼分析:ConcurrentHashMap 、ConcurrentLinkedQueue 、ConcurrentSkipListMap
  • 阻塞隊列源碼分析:ArrayBlockingQueue 、PriorityBlockingQueue 、DelayQueue 、SynchronousQueue 、LinkedTransferQueue 、LinkedBlockingDeque
  • 執行器使用和源碼分析:ThreadPoolExecutor 、ScheduledThreadPoolExecutor
相關文章
相關標籤/搜索