生產者消費者問題

2022-05-02 08:33:13 字數 1838 閱讀 9925

如問題的名字那樣,首先要有個生產者和消費者,所以需要定義兩個class來分別描述他們的特點。

/**

* 生產者執行緒類 */

class producer implements

runnable

@override

public

void

run()

catch

(interruptedexception e) }}

}

/**

* 消費者執行緒類 */

class consumer implements

runnable

@override

public

void

run()

catch

(interruptedexception e) }}

}

緊接著,生產者和消費者是通過「產品」聯絡起來,所以還需要定義乙個描述「產品」的pojo。

/**

* 產品的實體類 */

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