package cooperation;
/** * 協作模型:生產者消費者實現方式:管程法
* 借助緩衝區
* @author dell
* */
public
class
cotest01
}//生產者
class
productor
extends
thread
public
void
run()}
}//消費者
class
consumer
extends
thread
public
void
run()}
}//緩衝區
class
syncontainer
catch
(interruptedexception e)
}//存在空間可以生產
buns[count]
=bun;
count++
;//存在資料了可以通知消費了
this
.notifyall()
;}//獲取 消費
public
synchronized steamedbun pop()
catch
(interruptedexception e)
}//存在資料可以消費
count--
; steamedbun bun=buns[count]
;this
.notifyall()
;//存在空間了,可以喚醒對方生產了
return bun;}}
//饅頭
class
steamedbun
}
package cooperation;
public
class
cotest02
}//生產者 演員
class
player
extends
thread
public
void
run(
)else}}
}//消費者 觀眾
class
watcher
extends
thread
public
void
run()}
}//同乙個資源 電視
class
tvcatch
(interruptedexception e)
}//表演時刻
system.out.
println
("表演了"
+voice)
;this
.voice=voice;
//喚醒
this
.notifyall()
;this
.flag=
!this
.flag;
}//**
public
synchronized
void
watch()
catch
(interruptedexception e)
}//**
system.out.
println
("聽到了"
+voice)
;//喚醒
this
.notifyall()
;//切換標誌
this
.flag=
!this
.flag;
}}
生產者 消費者問題(管程法與訊號燈法)
應用場景 生產者和消費者問題 假設倉庫中只能存放一件產品,生產者將生產出來的產品放入倉庫,消費者將倉庫中產品取走消費.如果倉庫中沒有產品,則生產者將產品放入倉庫,否則停止生產並等待,直到倉庫中的產品被消費者取走為止.如果倉庫中放有產品,則消費者可以將產品取走消費,否則停止消費並等待,直到倉庫中再次放...
管程法實現生產者消費者模式
package monitormethod author 丟了風箏的線 see 測試管程法 public class test package monitormethod author 丟了風箏的線 see 存放商品的倉庫 public class warehouse catch interrupt...
生產者消費者模型 管程法
package thread 測試 生產消費者模型 利用緩衝區解決 管程法 public class pcthread 生產者 class product extends thread 生產 override public void run 消費者 class consumer extends th...