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

2021-10-05 17:18:09 字數 1864 閱讀 3735

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...