執行緒通訊問題 生產者 消費者模式

2021-10-24 15:57:03 字數 2045 閱讀 5417

解決執行緒之間通訊問題的方法

解決方法1

併發協作模型「生產者/消費者模式」—>管程法

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

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

public

class

testpc

}//生產者

class

producftor

extends

thread

//生產

@override

public

void

run()}

}//消費者

class

consumer

extends

thread

//消費

@override

public

void

run()}

}//產品

class

chicken

}//緩衝區

class

syncontainer

catch

(interruptedexception e)

}//如果沒有滿,我們就需要丟入產品

chickens[count]

= chicken;

count++

;//可以通知消費者消費了

this

.notifyall()

;}//消費者消費產品

public

synchronized chicken pop()

catch

(interruptedexception e)

}//如果可以消費

count--

; chicken chicken = chickens[count]

;//吃完了,通知消費者生產

this

.notifyall()

;return chicken;

}}

解決方法2

併發協作模型「生產者/消費者模式」—>訊號燈法 標誌位解決

//測試:生產者/消費者模式--->訊號燈法,標誌位解決

public

class

testpc2

}//生產者--->演員

class

player

extends

thread

@override

public

void

run(

)else}}

}//消費者--->觀眾

class

watcher

extends

thread

@override

public

void

run()}

}//產品--->節目

class

tvcatch

(interruptedexception e)

} system.out.

println

("演員表演了:"

+ voice)

;//通知觀眾**

this

.notify()

;//通知喚醒

this

.voice = voice;

this

.flag =

!this

.flag;

}//**

public

synchronized

void

watch()

catch

(interruptedexception e)

} system.out.

println

("**了:"

+ voice)

;//通知演員表演

this

.notify()

;this

.flag =

!this

.flag;

}}

執行緒通訊 生產者 消費者模式

恢復內容開始 執行緒是作業系統中獨立的個體,但這些個體之間如果沒有特殊的處理就不能成為乙個整體。而執行緒間的通訊機制就是成為整體的必用方案。執行緒間的通訊會使系統的互動性更強,在提高cpu利用率的同時還會使程式設計師對各執行緒任務在處理的過程中進行有效的把控和監督。等待 通知機制 執行緒之間不是獨立...

執行緒 執行緒間通訊(生產者消費者模式)

注意 1.執行緒間的通訊,共享的資料一定要有同步 塊synchronized 2.一定要有wait和notify,而且二者一定是成對出現 3.生產者和消費者的執行緒實現一定是在while true 裡面public class basket public void setempty boolean ...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...