多執行緒 juc lock實現精準喚醒

2021-10-09 08:03:46 字數 2224 閱讀 3793

用juc包裡lock+await+signal的組合替換傳統的synchronized+wait+notify,以實現精準通知,精準喚醒

場景:有三種執行緒a,b,c,讓它們輪流列印:a列印5遍「我是a」,b列印10遍「我是b」,c列印15遍「我是c」,a列印5遍「我是a」…這樣交替列印。

現假設a,b,c各有10個執行緒

**:

/**

* * @classname: printer

* @description: 印表機資源類

* @author: fuling

* @date: 2023年9月10日 下午12:37:39

*/class

printer

//a執行緒開始列印

for(

int i =

0; i <

5; i++

)//a執行緒列印完畢,標識位置為2,喚醒b種類的執行緒

this

.flag =2;

condition2.

signalall()

;}catch

(interruptedexception e)

finally

}/**

* * @title: printb

* @description: b類執行緒的列印操作

* @return: void

*/public

void

printb()

//b執行緒開始列印

for(

int i =

0; i <

10; i++

)//b執行緒列印完畢,標識位置為3,喚醒c種類的執行緒

this

.flag =3;

condition3.

signalall()

;}catch

(interruptedexception e)

finally

}/**

* * @title: printc

* @description: c類執行緒的列印操作

* @return: void

*/public

void

printc()

//c執行緒開始列印

for(

int i =

0; i <

15; i++

)//c執行緒列印完畢,標識位置為1,喚醒a種類的執行緒

this

.flag =1;

condition1.

signalall()

;}catch

(interruptedexception e)

finally}}

/** *

* @classname: lockdemo2

* @description: 啟動類,測試閉環呼叫

* @author: fuling

* @date: 2023年9月10日 下午12:51:06

*/public

class

lockdemo2).

start()

;;}for

(int i =

0; i <

10; i++))

.start()

;;}for

(int i =

0; i <

10; i++))

.start()

;;}}

}

執行結果
我是a執行緒

我是a執行緒

我是a執行緒

我是a執行緒

我是a執行緒

我是b執行緒

我是b執行緒

我是b執行緒

我是b執行緒

我是b執行緒

我是b執行緒

我是b執行緒

我是b執行緒

我是b執行緒

我是b執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是c執行緒

我是a執行緒

我是a執行緒

我是a執行緒

我是a執行緒

我是a執行緒

(40)多執行緒 實現多執行緒方法

建立執行緒用法 1.繼承thread,重寫run 方法,建立子類物件 a a new a 執行緒開始執行 a.start 2.實現runnable介面,實現run 方法,建立實現類物件 a a new a 建立 類物件 thread t new thread a 執行緒開始執行 t.start 上面...

執行緒基礎 實現多執行緒

public class thread01 extends thread public static void main string args public class thread02 implements runnable public static void main string args...

同步,多執行緒 ,多執行緒方式實現併發。

io請求幾乎不佔cpu的。同步請求相當於排隊買東西,乙個卡主了,其他的都結不了賬了。執行緒並不是越多越好,如果他特別多還不如同步高,所以對執行緒要有個限制,所以就出現了執行緒池,執行緒池在python3裡才有的,python2裡沒有的。建立程序的話是耗費很多資源的,建立執行緒是幾乎不耗費資源的。建立...