常用的閉鎖工具類:countdownlatch、cyclicbarrier、futuretask。
閉鎖應用場景
1.有a、b、c三個執行緒一起執行,可是a執行緒需要等待b、c執行緒任務執行完畢才繼續往下執行。
2.乙個執行緒的某步計算依賴於其它執行緒的執行結果。
用生活例子舉例,小明約小張和小李吃飯,小明先到了,可是要等到小張和小李都到齊才能開始點菜吃飯,小明到飯店後等待小張小李到齊的這個步驟就是乙個閉鎖,小張和小李到齊是閉鎖的兩個開鎖條件,只有滿足了開鎖條件,才能夠繼續點菜吃飯,否則只能幹坐著等待。
輸出結果:
以上demo便完成了乙個閉鎖的使用,十分簡單。cyclistbarrier的使用也和上面十分相似。
主要用來控制併發量,也可以用來實現指定長度的佇列。
下面用semaphore來實現乙個多執行緒變單執行緒的例子。
這是乙個執行緒不安全的計數demo,由於多執行緒執行緒併發執行時的cpu執行時序影響,結果十分混亂。
可以用semaphore使這個計數任務變成序列執行,把併發量設為1,同時只有乙個執行緒執行計數操作。
Java併發工具類
目錄 1.等待多執行緒完成的countdownlatch 2.同步屏障cyclicbarrier 3.控制併發執行緒數的semaphore 4.執行緒間交換資料的exchanger countdownlatch允許乙個或多個執行緒等待其他執行緒完成操作,類似於join方法。join的實現原理是不停的...
併發工具類 Exchanger
exchanger是特別容易理解的乙個工具類,它可以在兩個執行緒之間交換資料,只能是2個執行緒,他不支援更多的執行緒之間互換資料。當執行緒1呼叫exchange物件的exchange 方法後,他會陷入阻塞狀態,直到執行緒2也呼叫了exchange 方法,然後以執行緒安全的方式交換資料,之後執行緒a和...
JUC併發工具類
countdownlatch允許乙個或多個執行緒等待其他執行緒完成操作 具體分析 countdownlatch的建構函式接收乙個int型別的引數作為計數器,而int具體數值則代表要等待多少個執行緒點的完成!例如,程式中初始設定為2,則表示等待的數量為2.然後就是,countdownlatch的cou...