如問題的名字那樣,首先要有個生產者和消費者,所以需要定義兩個class來分別描述他們的特點。
/*** 生產者執行緒類 */
class producer implements
runnable
@override
public
void
run()
catch
(interruptedexception e) }}
}
/**緊接著,生產者和消費者是通過「產品」聯絡起來,所以還需要定義乙個描述「產品」的pojo。* 消費者執行緒類 */
class consumer implements
runnable
@override
public
void
run()
catch
(interruptedexception e) }}
}
/**最後是臨時容納「產品」的容器,它應該通過棧來實現,同時它的例項還被許多生產者例項和消費者例項,這些例項都象徵著乙個執行緒。* 產品的實體類 */
class
production
public
string tostring()
}
/*** 用棧實現的容器類 */
class
can ;
/**壓入乙個元素
*/public
synchronized
void push(production p) throws
interruptedexception
productions[pointer++] =p;
system.out.println(p + "被放入容器。");
notifyall();
}/**彈出乙個元素
*/public
synchronized production pop() throws
interruptedexception
production p = productions[--pointer];
system.out.println(p + "從容器取出。");
演示一下
package結果producerconsumerproblem.copy;
/*** 生產者消費者問題的演示類 */
class
problemdemo
}
1號產品被生產了。2號產品被生產了。
3號產品被生產了。
0號產品被生產了。
1號產品被放入容器。
4號產品被生產了。
1號產品從容器取出。
0號產品被放入容器。
1號產品被毀滅了。
5號產品被生產了。
3號產品被放入容器。
6號產品被生產了。
2號產品被放入容器。
7號產品被生產了。
6號產品被放入容器。
8號產品被生產了。
5號產品被放入容器。
9號產品被生產了。
5號產品從容器取出。
5號產品被毀滅了。
4號產品被放入容器。
…………
……
生產者消費者問題
public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...
生產者 消費者問題
在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...
生產者 消費者問題
1 程序互斥問題 緩衝區b是臨界資源,程序p和c不能同時對b進行操作,即只能互斥的操作 2 程序同步問題 p不能往 滿 的的緩衝區b放產品,c不能從空的緩衝區獲得產品。當緩衝區滿時,c必須先於p執行,當緩衝區空時,p必須先於c執行 我們給出如下基於記錄型 二元 訊號量機制的解法 10 9 2013 ...