tools
一些多線程場景用到的工具
- CountDownLatch (倒計時器):一個線程等待倒計時數目個線程都執行完畢後在一起做一件事,只能使用一次
如 如計算10個人12個月內的工資詳細然後計算一共交多少稅,可以將線程分爲11個,10個線程分別計算每個人的工資,計算後,再在主線程裏把所有人工資統一計算交稅,得出最後結果。 - CyclicBarrier(線程柵欄) :多個線程在柵欄處互相等待,最後都準備好再一起操作,可重複使用
如計算10個人12個月內的工資詳細,可以將線程分爲10個,分別計算每個人的工資,最後,再用barrierAction將這些線程的計算結果進行整合,得出最後結果。
CountDownLatch強調一個線程等多個線程完成某件事情。CyclicBarrier是多個線程互等,等大家都完成
- Exchanger(交換器): 兩個格子,兩個線程各有一個格子,兩個線程分別放數據,兩個格子自動交換位置
如線程間需要通信的地方都用的到 - 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
以上的數據類型都是基本數據類型的原子操作數據類型,在想使用哪種類型的時候直接換成原子類型即可