JAVA執行緒(生產者與消費者)
阿新 • • 發佈:2019-02-06
業務需求:
生產20個饅頭,籃子裡只能放6個饅頭。
消費者發現籃子裡有饅頭可以食用時即可把饅頭取出開始使用,直到籃子裡饅頭為空。
生產者發現籃子裡的饅頭不滿足6個時,生產者開始生產饅頭並放入籃子中。
具體實現:
第一步:建立盛放饅頭的籃子類
Java程式碼
第二步:建立生產者類
Java程式碼
第三步:建立消費者類
Java程式碼
第四步:建立饅頭物件類
Java程式碼
第五步:建立測試類
Java程式碼
到此生產者消費者的小例子結束,希望能起到拋磚引玉的作用。
生產20個饅頭,籃子裡只能放6個饅頭。
消費者發現籃子裡有饅頭可以食用時即可把饅頭取出開始使用,直到籃子裡饅頭為空。
生產者發現籃子裡的饅頭不滿足6個時,生產者開始生產饅頭並放入籃子中。
具體實現:
第一步:建立盛放饅頭的籃子類
Java程式碼
- publicclass SyncBasket {
- public Bread[] breads = new Bread[6];
- privateint index = 0;
-
publicsynchronizedvoid push(Bread bread ) {
- while(index==this.breads.length){
- try{
- this.wait();
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- }
- this.notifyAll();
- breads[index]=bread;
- index++;
- }
-
public
- while(index==0){
- try{
- this.wait();
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- }
- this.notifyAll();
- index--;
- return breads[index];
-
}
- }
第二步:建立生產者類
Java程式碼
- publicclass Producer implements Runnable {
- private SyncBasket basket;
- public Producer(SyncBasket basket) {
- this.basket = basket;
- }
- publicvoid run() {
- for(int i=1;i<21;i++){
- Bread bread = new Bread(i);
- basket.push(bread);
- System.out.println("producer produce: " + bread);
- try {
- Thread.sleep((int) (Math.random() * 1000));
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
第三步:建立消費者類
Java程式碼
- publicclass Consumer implements Runnable {
- private SyncBasket basket;
- public Consumer(SyncBasket basket) {
- this.basket = basket;
- }
- publicvoid run() {
- for(int i=0; i<20; i++) {
- Bread bread = basket.pop();
- System.out.println("Consumer eat: "+bread);
- try {
- Thread.sleep((int) (Math.random() * 1000));
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
第四步:建立饅頭物件類
Java程式碼
- publicclass Bread {
- privateint id;
- public Bread(int id){
- this.id=id;
- }
- @Override
- public String toString() {
- return String.valueOf(id);
- }
- }
第五步:建立測試類
Java程式碼
- publicclass TestProConsumer {
- publicstaticvoid main(String[] args) {
- SyncBasket basket=new SyncBasket();
- Producer producer=new Producer(basket);
- Consumer consumer=new Consumer(basket);
- new Thread(producer).start();
- new Thread(consumer).start();
- }
- }
到此生產者消費者的小例子結束,希望能起到拋磚引玉的作用。