hjr-JAVA java.util.concurrent

tools

一些多線程場景用到的工具

  1. CountDownLatch (倒計時器):一個線程等待倒計時數目個線程都執行完畢後在一起做一件事,只能使用一次
    如 如計算10個人12個月內的工資詳細然後計算一共交多少稅,可以將線程分爲11個,10個線程分別計算每個人的工資,計算後,再在主線程裏把所有人工資統一計算交稅,得出最後結果。
  2. CyclicBarrier(線程柵欄) :多個線程在柵欄處互相等待,最後都準備好再一起操作,可重複使用
    如計算10個人12個月內的工資詳細,可以將線程分爲10個,分別計算每個人的工資,最後,再用barrierAction將這些線程的計算結果進行整合,得出最後結果。

CountDownLatch強調一個線程等多個線程完成某件事情。CyclicBarrier是多個線程互等,等大家都完成

  1. Exchanger(交換器): 兩個格子,兩個線程各有一個格子,兩個線程分別放數據,兩個格子自動交換位置
    如線程間需要通信的地方都用的到
  2. Semaphore(信號量): 有三個功能,主要是控制同時進行的線程數量
  • 某一個界面需要同時發多個請求,全部請求都成功後再一起刷新界面 異步任務 同步返回
  • 多個請求必須按照一定順序執行 加鎖
  • 控制線程開啓的數量

Lock

1.lock

Lock接口提供了一些加鎖解鎖操作

2.ReadWriteLock

讀寫鎖分爲讀鎖和寫鎖

  • Read Lock – 沒有線程獲得寫鎖且沒有獲取寫鎖的請求,多個線程可以獲得讀鎖
  • Write Lock – 如果沒有線程讀或者寫,只有一個線程可以獲取寫鎖

collections

1、BlockingQueue
2、ArrayBlockingQueue
3、DelayQueue
4、LinkedBlockingQueue
5、PriorityBlockingQueue
6、SynchronousQueue
7、BlockingDeque
8、LinkedBlockingDeque
9、ConcurrentMap
10、ConcurrentNavigableMap

以上的各種隊列可以在想使用隊列這種數據結構時使用,此處提供的工具類可以實現線程安全的作用

executor

1、ExecutorService
2、ThreadPoolExecutor
3、ScheduledExecutorService

線程池是使用多線程時必定使用的工具,因爲手動頻繁創建和切換線程會浪費資源和時間,而設置好各種參數(如最大線程數核心線程數等),然後統一傳入到線程池,由線程池去管理各個線程,可以避免這一問題

atomic

1、AtomicBoolean
2、AtomicInteger
3、AtomicLong
4、AtomicReference
5、AtomicStampedReference
6、AtomicIntegerArray
7、AtomicLongArray
8、AtomicReferenceArray

以上的數據類型都是基本數據類型的原子操作數據類型,在想使用哪種類型的時候直接換成原子類型即可

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