建立乙個資源類:包子
package demo001;
/* *@author wanghongyuan
*@create 2021/1/6 8:01
*//*
資源類:包子類
設定包子的屬性皮陷
包子的狀態:有true 沒有 false
*/public
class
baozi
包子鋪類
package demo001;
/* *@author wanghongyuan
*@create 2021/1/6 8:06
*//*
生產者(包子鋪)類:是乙個執行緒類,可以繼承thread
設定執行緒任務(run):生產包子
對包子的狀態進行判斷
true:有包子
包子鋪呼叫wait方法進入等待狀態
false:沒有包子
包子鋪生產包子
增加一些趣味性:交替產生兩種包子
有兩種狀態(i%2==0)
包子鋪生產好了包子
修改包子的狀態為true有
喚醒吃貨執行緒,讓吃貨執行緒吃包子
注意:包子鋪執行緒和包子執行緒關係:-->通訊(互斥)
必須使用同步技術保證兩個執行緒只有乙個在執行
鎖物件必須保證唯一,可以使用包子物件作為鎖物件
包子鋪類和吃貨的類就需要把包子物件作為引數傳遞進來
1.需要在成員位置建立乙個包子變數
2.使用帶參的構造方法,為包子變數賦值
*/// 生產者(包子鋪)類:是乙個執行緒類,可以繼承thread
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秒鐘
trycatch
(interruptedexception e)
// 包子鋪生產好了包子
// 修改包子的狀態為有
bz.flag =
true
;// 喚醒吃貨執行緒,讓吃貨執行緒吃包子
bz.notify()
; system.out.
println
("包子鋪已經生產好了"
+bz.pi+bz.xian+
"的包子,吃貨可以開吃了");
}}}}
吃貨類
package demo09.lock;
/* @author wanghongyuan
@date 2021/1/6 */
/* 消費者(吃貨)類:是乙個執行緒類,可以繼承thread
設定執行緒任務(run):吃包子
false:沒有包子
吃貨呼叫wait方法進入等待狀態
true:有包子
吃貨吃包子
吃貨吃完包子
修改包子的狀態為false沒有
吃貨喚醒包子鋪執行緒,生產包子
*/public
class
chihuo
extends
thread
// 設定執行緒任務(run):吃包子
@override
public
void
run(
)catch
(interruptedexception e)
}// 被喚醒之後:執行的**
system.out.
println
("吃貨正在吃包子"
+bz.pi+bz.xian+
"的包子");
// 吃完包子將包子的狀態修改為false
bz.flag =
false
;// 吃貨喚醒包子鋪執行緒,生產包子
bz.notify()
; system.out.
println
("吃貨已經把"
+bz.pi+bz.xian+
"的包子吃完了,包子鋪開始生產包子");
system.out.
println
("***********************************===");
}}}}
測試類,執行類
package demo09.lock;
/* @author wanghongyuan
@date 2021/1/6 */
/* 測試類:
包含main方法,程式執行的入口,啟動程式
建立包子物件
建立包子鋪執行緒,開啟,生產包子
建立吃貨執行緒,開啟,吃包子
*/public
class
demo
}
結果展示
正在做薄皮三鮮餡的包子
包子鋪已經生產好了薄皮三鮮餡的包子,吃貨可以開吃了
吃貨正在吃包子薄皮三鮮餡的包子
吃貨已經把薄皮三鮮餡的包子吃完了,包子鋪開始生產包子
***********************************===
正在做冰皮牛肉大蔥餡的包子
包子鋪已經生產好了冰皮牛肉大蔥餡的包子,吃貨可以開吃了
吃貨正在吃包子冰皮牛肉大蔥餡的包子
吃貨已經把冰皮牛肉大蔥餡的包子吃完了,包子鋪開始生產包子
***********************************===
正在做薄皮三鮮餡的包子
包子鋪已經生產好了薄皮三鮮餡的包子,吃貨可以開吃了
吃貨正在吃包子薄皮三鮮餡的包子
吃貨已經把薄皮三鮮餡的包子吃完了,包子鋪開始生產包子
***********************************===
正在做冰皮牛肉大蔥餡的包子
包子鋪已經生產好了冰皮牛肉大蔥餡的包子,吃貨可以開吃了
吃貨正在吃包子冰皮牛肉大蔥餡的包子
吃貨已經把冰皮牛肉大蔥餡的包子吃完了,包子鋪開始生產包子
***********************************===
正在做薄皮三鮮餡的包子
包子鋪已經生產好了薄皮三鮮餡的包子,吃貨可以開吃了
吃貨正在吃包子薄皮三鮮餡的包子
吃貨已經把薄皮三鮮餡的包子吃完了,包子鋪開始生產包子
***********************************===
正在做冰皮牛肉大蔥餡的包子
包子鋪已經生產好了冰皮牛肉大蔥餡的包子,吃貨可以開吃了
吃貨正在吃包子冰皮牛肉大蔥餡的包子
吃貨已經把冰皮牛肉大蔥餡的包子吃完了,包子鋪開始生產包子
***********************************===
正在做薄皮三鮮餡的包子
包子鋪已經生產好了薄皮三鮮餡的包子,吃貨可以開吃了
吃貨正在吃包子薄皮三鮮餡的包子
吃貨已經把薄皮三鮮餡的包子吃完了,包子鋪開始生產包子
***********************************===
正在做冰皮牛肉大蔥餡的包子
包子鋪已經生產好了冰皮牛肉大蔥餡的包子,吃貨可以開吃了
吃貨正在吃包子冰皮牛肉大蔥餡的包子
吃貨已經把冰皮牛肉大蔥餡的包子吃完了,包子鋪開始生產包子
***********************************===
等待喚醒機制包子鋪案例
概念 多個執行緒在處理同乙個資源,處理的動作 任務 不同 資源類 包子類 設定包子的屬性 皮 餡 包子的狀態 有true,沒有false public class baozi 包子鋪 執行緒類,繼承thread 設定執行緒任務run 生產包子 對包子的狀態判斷 true 呼叫wait方法進入等待狀態...
等待喚醒案例 wait方法和notifyAll方法
package text2 public class demo6waitandnotify catch interruptedexception e 喚醒之後執行的 system.out.println 包子做好了,開吃!start 建立乙個老闆執行緒 newthread catch interru...
喚醒案例 執行緒之間的通訊
建立乙個顧客執行緒 消費者 建立乙個老闆執行緒 生產者 注意 顧客和老闆執行緒必須使用同步 塊包裹起來,保證等待和喚醒只能有乙個人在執行.同步使用的鎖物件必須保證唯一.只有鎖物件才能呼叫wait和notify方法.public class waitandnotify catch interrupte...