作用:讓當前執行緒進入等待狀態(使執行緒停止執行),同時,wait()也會讓當前執行緒釋放它所持有的鎖,直到其他執行緒呼叫此物件的 notify() 方法或 notifyall() 方法,當前執行緒被喚醒(進入「就緒態」)注意:
作用:喚醒當前物件上的等待執行緒(讓停止的執行緒繼續執行);notify()是隨機喚醒乙個執行緒,而notifyall()是喚醒所有的執行緒。注意:
作用:讓當前執行緒處於阻塞狀態,直到其他執行緒呼叫此物件的notify()方法或 notifyall() 方法, 或者超過指定的時間量,當前執行緒被喚醒。注:wait(),notify()必須使用在synchronized同步方法或者**塊內
流程圖:for
/ whie 迴圈
//滿足執行條件
執行...業務
//不推薦寫notify(),在極端情況下,可能導致所有執行緒阻塞等待
object.
notifyall()
}}
麵包店問題:
麵包店問題高階:/**
* 麵包店
* 10個生產者,每個每次生產3個
* 20個消費者,每個每次消費1個
* 庫存最大容量為100
*/public
class
breadshop
@override
public
void
run(
)else
} thread.
sleep
(100);
//優化}}
catch
(interruptedexception e)}}
/** * 生產者
*/public
static
class
producer
implements
runnable
@override
public
void
run(
)else
} thread.
sleep
(100);
}}catch
(interruptedexception e)}}
public
static
void
main
(string[
] args)
//同時啟動10個生產者執行緒
thread[
] producers =
newthread[10
];for(
int i =
0; i <
10; i++
)for
(thread t : consumers)
for(thread t : producers)
}}
/**
* 麵包店
* 10個生產者,每個每次生產3個
* 20個消費者,每個每次消費1個
* 公升級需求:麵包師傅每個最多生產30次:
* 消費者不再一直消費,把生產者生產完的麵包消費完,就結束
* 隱藏資訊:麵包店每天生產麵包的最大數量:麵包店每天生產10*30*3=900個麵包
* 消費者,把900個麵包消費完結束
*/public
class
breadshop2
@override
public
void
run(
)//庫存到達下限,不能繼續消費,需要阻塞等待
if(麵包店庫存 - 每次消費的麵包數 <0)
else
} thread.
sleep
(100);
}}catch
(interruptedexception e)}}
//生產者
public
static
class
producer
implements
runnable
@override
public
void
run(
) 麵包店庫存 += 每次生產的麵包數;
生產麵包的總數 += 每次生產的麵包數;
//庫存滿足生產條件
system.out.
printf
("生產者 %s 生產了%s次, 庫存%s, 生產的數量%s\n"
, name, i+
1, 麵包店庫存, 生產麵包的總數)
;//通知breadshop.class.wait();**進入阻塞的執行緒
breadshop2.
class
.notifyall()
;//模擬消費的耗時
thread.
sleep
(200);
} thread.
sleep
(100);
}}catch
(interruptedexception e)}}
public
static
void
main
(string[
] args)
//同時啟動10個生產者執行緒
thread[
] producers =
newthread
[生產者數量]
;for
(int i =
0; i< 生產者數量; i++
)for
(thread t : consumers)
for(thread t : producers)
}}
執行緒間的通訊
執行緒間的通訊 簡單說明 執行緒間通訊 在1個程序中,執行緒往往不是孤立存在的,多個執行緒之間需要經常進行通訊 執行緒間通訊的體現 1個執行緒傳遞資料給另1個執行緒 在1個執行緒中執行完特定任務後,轉到另1個執行緒繼續執行任務 執行緒間通訊常用方法 06 nsthread04 執行緒間通訊 impo...
執行緒間的通訊
1.執行緒間的通訊 多個執行緒處理同乙個資源,但處理的動作卻不同 2.執行緒間的有效通訊 使用等待喚醒機制,實現協調通訊,讓執行緒間進行有規律的執行 3.條件 3.1 wait方法與notify方法必須由同乙個鎖物件呼叫,因為,對應的鎖物件可以通過notify喚醒使用同乙個物件呼叫的wait方法後的...
執行緒間的通訊
常用的 wait notify notifyall 在乙個執行緒裡面,喚醒其他擁有同樣的鎖的執行緒 使用wait notify notifyall 時,塊必須上鎖 author fzz public class communicate catch interruptedexception e sys...