等待喚醒機制包子鋪案例

2021-10-10 13:15:51 字數 1863 閱讀 4436

概念:多個執行緒在處理同乙個資源,處理的動作(任務)不同

/*資源類:包子類

設定包子的屬性:

皮、餡、包子的狀態:有true,沒有false

public class baozi
/*

包子鋪:執行緒類,繼承thread

設定執行緒任務run;生產包子

對包子的狀態判斷

true:呼叫wait方法進入等待狀態

false:沒有包子

交替生產兩種包子,有兩種狀態(i%2==0)

生產好了包子 修改包子的狀態為true

喚醒吃貨執行緒,讓吃貨執行緒吃包子

注意事項:

包子鋪執行緒和包子執行緒關係–>通訊關係(互斥)

同步技術保證兩個執行緒只有乙個執行

鎖物件必須保證唯一,可以使用包子物件作為鎖物件

包子鋪和吃貨的類需要把包子物件作為引數傳遞進來

1、需要再成員位置建立乙個包子變數

2、使用帶引數構造方法,為這個包子變數賦值

*/

public class baozipu extends thread

//設定執行緒任務run,生產包子

@override

public void run() catch (interruptedexception e)

}//喚醒後執行 生產包子 兩種包子

if(count%2==0)else

count++;

system.out.println("包子鋪正在生產:"+bz.pi+bz.xian+"包子");

//生產時間 3秒

try catch (interruptedexception e)

//生產好包子之後,修改包子狀態

bz.flag = true;

//喚醒吃貨執行緒 吃包子

bz.notify();

system.out.println("包子鋪已經生產好"+bz.pi+bz.xian+"包子,吃貨可以開吃了");}}

}}

/*

吃貨執行緒:繼承thre

任務run:吃包子

對包子的狀態進行判斷

true:吃包子

吃完包子 修改包子狀態為false

吃貨喚醒包子鋪執行緒,生產包子

false:吃貨呼叫wait方法進入等待

*/

public class chihuo extends thread

@override

public void run() catch (interruptedexception e)

}//喚醒之後執行**,吃包子

system.out.println("吃貨正在吃"+bz.pi+bz.xian+"的包子");

//修改包子的狀態

bz.flag = false;

//喚醒包子鋪生產包子

bz.notify();

try catch (interruptedexception e)

system.out.println("吃貨已經吃完了"+bz.pi+bz.xian+"的包子");

system.out.println("------------------------");}}

}}

/*

測試類:

包含main方法 程式執行入口

建立包子物件

建立包子鋪執行緒、吃貨執行緒

*/

public class demo 

}

14 等待喚醒機制 乙個吃貨和包子鋪之間的案例

小案例 消費之和生產者包子關係 等待喚醒案例 執行緒之間的通訊 建立乙個顧客執行緒 消費者 告知老闆要的包子種類和數量,呼叫wait方法,放棄cpu執行,進入到waiting狀態 無限等待 建立乙個老闆執行緒 生產者 花了5秒做包子,做好了之後,呼叫notify方法,喚醒顧客吃包子 注意 1.顧客和...

學習部落格 執行緒的等待喚醒機制 賣包子案例

wait 使用了wait就等待了。立即釋放鎖。將來醒過來的時候,是從這裡醒過來的時候 b.notify 喚醒執行緒的方法 主方法 package cn.zsp.thread 03 wait 使用了wait就等待了。立即釋放鎖。將來醒過來的時候,是從這裡醒過來的時候 public class baoz...

執行緒間通訊 等待喚醒機制及買賣包子案例

執行緒間通訊 等待喚醒機制,避免爭奪同一資源 鎖物件可以是任意object類的子類物件 包子案例 包子案例 生產者和消費者 關鍵就是在於兩個執行緒使用同乙個鎖物件 這邊是主程式呼叫這兩個執行緒時候傳入的同乙個物件!其中,baozi類作為成員變數,並且過載了帶參的構造方法 鎖物件為呼叫包子鋪帶參的構造...