多執行緒基礎練習實踐篇

weixin_33670713發表於2018-11-06

1.複習題一: 建立三個執行緒A、B、C,實現交替列印,即按照ABCABCABC的順序列印。

我們可以使用java多執行緒中的join,ReentrantLock,ReentrantLock -condition條件,synchronized分別實現。

PS:使用join實現的時候,千萬不要在各個執行緒中使用join,因為執行緒不是按順序啟動的,所以無法保障會按順序輸出。

2.題目:建立20個執行緒,按每5個執行緒為一組輸出內容。

訊號量(Semaphore) 的使用, 訊號量可以指定多個執行緒同時訪問。

訊號量實現

3.CountDownLatch 多執行緒控制工具類

使用場景:火箭發射,其他工序完成後,才開始倒數計時發射操作。

CheckThread為各項檢查工序類,UltimateThread為最終發射類。

CountDownLatch

4.可迴圈的執行器 CyclicBarrier

這裡模擬的是士兵集合以及完成任務兩個操作。

需要注意的是Demo中的CyclicBarrier(int parties, Runnable barrierAction) 這個建構函式, 第一個引數為 參與的執行緒總數,第二個引數為 一個動作類 指的是一次計數完成後 執行的動作。

CyclicBarrierDemo

5.讀寫鎖ReentrantReadWriteLock

讀寫鎖的DMOE練習,是 《JAVA高併發程式設計》書中的第三章 3.1.4小節的內容,因為書上的例子做了模擬,我自己寫了讀寫檔案的方法,通過檢視檔案的讀寫內容可以快速的看出是否讀寫鎖具有高效的性質。

ReentrantReadWriteLock

6.fork/join框架

參考 http://ifeve.com/fork-join-3/

開發一個在文件中查詢單詞的應用程式。你將會實現以下兩種任務型別:

  • 1.一個文件任務,將在文件中的行集合中查詢一個單詞。
  • 2.一個行任務,將在文件的一部分資料中查詢一個單詞。
  • 3.所有任務將返回單詞在文件的一部分中或行中出現的次數。

這個demo寫完之後,效率總是不高。

fork/join框架

相關文章