Lock和Condition實現多執行緒迴圈執行

2021-10-03 03:18:28 字數 1160 閱讀 9971

我們可能有如下使用場景:

a、b、c三個執行緒,業務需要a執行5遍,然後b執行10遍,然後c執行15遍,如此迴圈

這時候我們可以考慮用到lock的condition機制

public

class

locktest

for(

int i =

0; i <

5; i++

) number =2;

c2.signal()

; lock.

unlock()

;}public

void

print10()

throws interruptedexception

for(

int i =

0; i <

10; i++

) number =3;

c3.signal()

; lock.

unlock()

;}public

void

print15()

throws interruptedexception

for(

int i =

0; i <

15; i++

) number =1;

c1.signal()

; lock.

unlock()

;}public

static

void

main

(string[

] args)

}catch

(interruptedexception e)},

"aaa").

start()

;new

thread((

)->

}catch

(interruptedexception e)},

"bbb").

start()

;new

thread((

)->

}catch

(interruptedexception e)},

"ccc").

start()

;}}

Lock和Condition物件的使用

condition的await 方法 void await throws interruptedexception導致當前執行緒等到發訊號或interrupted 在所有情況下,在此方法返回之前,當前執行緒必須重新獲取與此條件相關的鎖。當執行緒返回時,它保證保持此鎖。實現兩個執行緒交替執行的案例 c...

mutex和condition的用法

分享一下用到的mutex和condition用法。mutex一般有兩種使用情況,一種是單獨使用,保護臨界區。一種是和condition配合使用,可以等待某condition拿到之後再向下走。condition 有兩種signal形式,single和 broadcast,下面例子是signal的,做個...

redis中condition和unless的區別

1.註解的condition和unless的區別,condition對傳入值生效,unless對結果result生效,使用了錯誤的result導致報空錯誤 2.key鍵生成策略,不能再key中直接呼叫工具類的方法,將方法寫在同乙個類下,使用 root.target.methodname p0.att...