生產者 消費者問題(管程法與訊號燈法)

2022-09-07 00:15:33 字數 1132 閱讀 7510

應用場景:生產者和消費者問題◆假設倉庫中只能存放一件產品,生產者將生產出來的產品放入倉庫,消費者將倉庫中產品取走消費.◆如果倉庫中沒有產品,則生產者將產品放入倉庫,否則停止生產並等待,直到倉庫中的產品被消費者取走為止.◆如果倉庫中放有產品,則消費者可以將產品取走消費,否則停止消費並等待,直到倉庫中再次放入產品為止.

這是乙個執行緒同步問題,生產者和消費者共享同乙個資源,並且生產者和消費者之間相互依賴,互為條件.◆對於生產者,沒有生產產品之前,要通知消費者等待.而生產了產品之後,又需要馬.上通知消費者消費◆對於消費者, 在消費之後,要通知生產者已經結束消費,需要生產新的產品以供消費.◆在生產者消費者問題中,僅有synchronized是不夠的◆synchronized 可阻止併發更新同乙個共享資源,實現了同步◆synchronized 不能用來實現不同執行緒之間的訊息傳遞(通訊)

◆生產者:負責生產資料的模組(可能是方法,物件,執行緒,程序);◆消費者:負責處理資料的模組(可能是方法,物件,執行緒,程序);◆緩衝區:消費者不能直接使用生產者的資料,他們之間有個「緩衝區生產者將生產好的資料放入緩衝區,消費者從緩衝區拿出資料

package com.xxgc.lock;

​//測試:生產者消費者模型-->利用緩衝區解決:管程法

//生產者、消費者、產品、緩衝區

public class testpc }​

//生產者

class producer extends thread

//生產

​@override

public void run() }}

​//消費者

class consumer extends thread

​//消費

@override

public void run() }}

​//產品

class chicken}​

//緩衝區

class syncontainer catch (interruptedexception e) {

e.printstacktrace();

生產者消費者模式 管程法,訊號燈法

package cooperation 協作模型 生產者消費者實現方式 管程法 借助緩衝區 author dell public class cotest01 生產者 class productor extends thread public void run 消費者 class consumer ...

生產者消費者模型 管程法

package thread 測試 生產消費者模型 利用緩衝區解決 管程法 public class pcthread 生產者 class product extends thread 生產 override public void run 消費者 class consumer extends th...

測試 生產者消費者模型 訊號燈法,標誌位解決

package com.sean.base.threadstudy 測試 生產者消費者模型 訊號燈法,標誌位解決 create 2021 02 28 13 39 public class pcdemo02 生產者 演員 class player extends thread override pub...