Java的JUC包的整體結構與功能概述

在JDK1.5之前,Java中擁有的與線程和同步相關的組件有:

  1. 描述線程的類Thread,代表線程任務的接口Runable;內置條件隊列操作接口Object.wait()/notify()/notifyAll(),它們都位於java.lang包;
  2. 提供volatile關鍵字,用來保證單操作變量的內存可見性;提供synchronized關鍵字作爲內置鎖,用來保證線程同步
  3. 提供簡單且效率低下的併發容器,比如Hashtable、Vector等,位於Java.util包。

可以看到,此時的Java對於併發編程的支持還是很簡陋和原始的,比如想要開多條線程只能手動new多個Thread對象。JDK1.5的時候增加了許多線程和同步有關的特性,大大提高了使用Java進行併發編程的效率:

  1. 加強了volatile關鍵字的語義,JDK1.5開始volatile關鍵字能夠防止編譯器對被聲明volatile的變量進行重排序,即在volatile變量訪問前的代碼不可以排到訪問後;訪問後的代碼不可以排序到訪問前。從而可以真正的用來實現安全的雙重檢測鎖(JDK1.5之前的雙重檢測鎖都是不安全的,因爲volatile關鍵字不具有禁止重排序語義)。
  2. 增加了java.util.concurrent包,又稱併發包、JUC。JUC中包含了大量在java併發編程中非常有用的工具類,包括五個部分:
    a) locks部分:在java.util.concurrent.locks包中,提供更加強大的顯式鎖,比如 重入鎖ReentrantLock、讀寫鎖ReadWriteLock;
    b) atomic部分:在java.util.concurrent.atomic包中,提供原子變量類相關的功能,是構建非阻塞算法CAS的基礎,比如AtomicInteger;
    c) executor部分:在java.util.concurrent包中,提供線程池相關的功能,用於批量創建、管理線程,比如ThreadPoolExecutor等,以及對線程任務的加強,比如Callable等
    d) collections部分:在java.util.concurrent包中,提供一系列高性能的併發容器,比如ConcurrentHashMap、CopyOnWriteArrayList等;
    e) tools部分:在java.util.concurrent包中,提供簡單高效的同步工具類,如信號量Semaphore、閉鎖CountDownLatch、柵欄CyclicBarrier等;

本文只是一個JUC的整體架構介紹,後續我們將會詳細介紹JUC包的每一部分的重點內容、源碼!

如果有什麼不懂或者需要交流,可以留言。另外希望點贊、收藏、關注,我將不間斷更新各種Java學習博客!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章