但是很多時候執行緒之間僅僅同步是不夠的,還需要不同執行緒之間的訊息傳遞通訊,因此,提出了生產者消費者問題。
問題的提出:當我們把生產者和消費者當做兩個執行緒來看待時,就需要執行緒之間的通訊才能解決上面的問題了。對於生產者,在生產產品之前需要通知消費者等待,當生產完需要通知消費者消費。
對於消費者,在消費完以後需要通知生產者生產產品,當產品為空時需要等待。
方法名方法說明
wait()
使執行緒處於等待狀態並且釋放鎖,直到其它執行緒通知
wait(long timeout)
指定等待的毫秒數
notify()
喚醒處於等待狀態的執行緒
notifyall()
喚醒同一物件上所有呼叫wait()方法的執行緒,優先級別高的執行緒優先排程
public
class
testpc
}//生產者
class
productor
extends
thread
@override
public
void
run()}
}//消費者
class
consumer
extends
thread
@override
public
void
run()}
}//產品(kfc)
class
chicken
}//緩衝區
class
syncontainer
catch
(interruptedexception e)
} chickens[count]
= chicken;
count++
;this
.notify()
;}//消費者從容器取出產品
public
synchronized chicken pop()
catch
(interruptedexception e)
} count--
; chicken chicken = chickens[count]
;this
.notify()
;return chicken;
}}
public
class
testpc
}//生產者(演員)
class
player
extends
thread
@override
public
void
run()}
}//消費者(觀眾)
class
watcher
extends
thread
@override
public
void
run()}
}//產品(節目)
class
tvcatch
(interruptedexception e)
} system.out.
println
("演員表演了:"
+voice)
;this
.notifyall()
;this
.voice = voice;
this
.flag =
!this
.flag;
}//觀眾**
public
synchronized
void
watch()
catch
(interruptedexception e)
}this
.notifyall()
; system.out.
println
("觀眾**了:"
+voice)
;this
.flag =
!this
.flag;
}}
生產者消費者,多執行緒問題
從上乙個小測試當中,我們會發現執行緒之間存在爭奪問題,所以在這裡用上了訊號鎖 include include include include include include include define max size 5 struct data structpro max size sem t ...
多執行緒 生產者消費者問題
package multithreading.pc 測試 生產者消費者模型 利用緩衝區解決 管程法 生產者,消費者,產品,緩衝區 public class testpc 生產者 class productor extends thread 生產 override public void run 消費...
多執行緒 生產者消費者
這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...