cyclicbarrier 是什麼?
從字面上的意思可以知道,這個類的中文意思是「迴圈柵欄」。大概的意思就是乙個可迴圈利用的屏障。
它的作用就是會讓所有執行緒都等待完成後才會繼續下一步行動。
舉個例子,就像生活中我們會約朋友們到某個餐廳一起吃飯,有些朋友可能會早到,有些朋友可能會晚到,但是這個餐廳規定必須等到所有人到齊之後才會讓我們進去。這裡的朋友們就是各個執行緒,餐廳就是 cyclicbarrier。
怎麼使用 cyclicbarrier
2.1 構造方法
public
cyclicbarrier
(int parties)
public
cyclicbarrier
(int parties, runnable barrieraction)
解析:
parties 是參與執行緒的個數
第二個構造方法有乙個 runnable 引數,這個引數的意思是最後乙個到達執行緒要做的任務
2.2 重要方法
public
intawait()
throws interruptedexception, brokenbarrierexception
public
intawait
(long timeout, timeunit unit)
throws interruptedexception, brokenbarrierexception, timeoutexception
解析:
執行緒呼叫 await() 表示自己已經到達柵欄
brokenbarrierexception 表示柵欄已經被破壞,破壞的原因可能是其中乙個執行緒 await() 時被中斷或者超時
2.3 基本使用
2.3.1 需求
乙個執行緒組的執行緒需要等待所有執行緒完成任務後再繼續執行下一次任務
2.3.2 **實現
public
class
cyclicbarrierdemo
@override
public
void
run(
)catch
(exception e)}}
public
static
void
main
(string[
] args)})
;for
(int i =
0; i < threadnum; i++)}
}
列印結果:
thread-
1 到達柵欄 a
thread-
3 到達柵欄 a
thread-
0 到達柵欄 a
thread-
4 到達柵欄 a
thread-
2 到達柵欄 a
thread-
2 完成最後任務
thread-
2 衝破柵欄 a
thread-
1 衝破柵欄 a
thread-
3 衝破柵欄 a
thread-
4 衝破柵欄 a
thread-
0 衝破柵欄 a
thread-
4 到達柵欄 b
thread-
0 到達柵欄 b
thread-
3 到達柵欄 b
thread-
2 到達柵欄 b
thread-
1 到達柵欄 b
thread-
1 完成最後任務
thread-
1 衝破柵欄 b
thread-
0 衝破柵欄 b
thread-
4 衝破柵欄 b
thread-
2 衝破柵欄 b
thread-
3 衝破柵欄 b
從列印結果可以看出,所有執行緒會等待全部執行緒到達柵欄之後才會繼續執行,並且最後到達的執行緒會完成 runnable 的任務。
cyclicbarrier 使用場景
可以用於多執行緒計算資料,最後合併計算結果的場景。
cyclicbarrier 與 countdownlatch 區別
countdownlatch 是一次性的,cyclicbarrier 是可迴圈利用的
countdownlatch 參與的執行緒的職責是不一樣的,有的在倒計時,有的在等待倒計時結束。cyclicbarrier 參與的執行緒職責是一樣的。
CyclicBarrier 使用詳解
從字面上的意思可以知道,這個類的中文意思是 迴圈柵欄 大概的意思就是乙個可迴圈利用的屏障。它的作用就是會讓所有執行緒都等待完成後才會繼續下一步行動。舉個例子,就像生活中我們會約朋友們到某個餐廳一起吃飯,有些朋友可能會早到,有些朋友可能會晚到,但是這個餐廳規定必須等到所有人到齊之後才會讓我們進去。這裡...
CyclicBarrier 使用詳解
使用場景 cyclicbarrier 與 countdownlatch 區別 從字面上的意思可以知道,這個類的中文意思是 迴圈柵欄 大概的意思就是乙個可迴圈利用的屏障。它的作用就是會讓所有執行緒都等待完成後才會繼續下一步行動。舉個例子,就像生活中我們會約朋友們到某個餐廳一起吃飯,有些朋友可能會早到,...
CyclicBarrier 使用詳解
從字面上的意思可以知道,這個類的中文意思是 迴圈柵欄 大概的意思就是乙個可迴圈利用的屏障。它的作用就是會讓所有執行緒都等待完成後才會繼續下一步行動。舉個例子,就像生活中我們會約朋友們到某個餐廳一起吃飯,有些朋友可能會早到,有些朋友可能會晚到,但是這個餐廳規定必須等到所有人到齊之後才會讓我們進去。這裡...