麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

JAVA生產(chǎn)者消費(fèi)者(線程同步)代碼學(xué)習(xí)示例

2019-11-26 15:53:22
字體:
供稿:網(wǎng)友

一、問題描述

生產(chǎn)者消費(fèi)者問題是一個典型的線程同步問題。生產(chǎn)者生產(chǎn)商品放到容器中,容器有一定的容量(只能順序放,先放后拿),消費(fèi)者消費(fèi)商品,當(dāng)容器滿了后,生產(chǎn)者等待,當(dāng)容器為空時,消費(fèi)者等待。當(dāng)生產(chǎn)者將商品放入容器后,通知消費(fèi)者;當(dāng)消費(fèi)者拿走商品后,通知生產(chǎn)者。

二、解決方案

對容器資源加鎖,當(dāng)取得鎖后,才能對互斥資源進(jìn)行操作。

復(fù)制代碼 代碼如下:

public class ProducerConsumerTest {

    public static void main(String []args){
        Container con = new Container();
        Producer p = new Producer(con);
        Consumer c = new Consumer(con);
        new Thread(p).start();
        new Thread(c).start();
    }

}


class Goods{
    int id;
    public Goods(int id){
        this.id=id;
    }

    public String toString(){
        return "商品"+this.id;
    }
}

class Container{//容器采用棧,先進(jìn)后出
    private int index = 0;
    Goods[] goods = new Goods[6];

    public synchronized void push(Goods good){
        while(index==goods.length){//當(dāng)容器滿了,生產(chǎn)者等待
            try {
                wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        goods[index]=good;
        index++;
        notifyAll();//當(dāng)生產(chǎn)者放入商品后通知消費(fèi)者
    }

    public synchronized Goods pop(){
        while(index==0){//當(dāng)容器內(nèi)沒有商品是等待
            try {
                wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        index--;
        notifyAll();//當(dāng)消費(fèi)者消費(fèi)了商品后通知生產(chǎn)者
        return goods[index];
    }
}

class Producer implements Runnable{

    Container con = new Container();
    public Producer(Container con){
        this.con=con;
    }

    public void run(){
        for(int i=0; i<20; i++){
            Goods good = new Goods(i);
            con.push(good);
            System.out.println("生產(chǎn)了:"+good);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

class Consumer implements Runnable{

    Container con = new Container();
    public Consumer(Container con){
        this.con=con;
    }

    public void run(){
        for(int i=0; i<20; i++){
            Goods good=con.pop();
            System.out.println("消費(fèi)了:"+good);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

   
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产韩国精品一区二区三区久久 | 欧美成人免费 | 成人免费一区二区三区在线观看 | 久在线观看福利视频69 | 久久久久久久一区二区 | 国产毛片在线看 | 国产成人在线网址 | 综合国产在线 | 香蕉国产在线视频 | jizzzzxxxxx| 国产大片中文字幕在线观看 | 国产污污视频 | 午夜久久久精品一区二区三区 | 1314成人网| 91福利免费观看 | 草操影院| 国产精品久久久久久久久久东京 | 久久久婷婷一区二区三区不卡 | 久久久久久久久久性 | 大西瓜永久免费av在线 | 九九热在线视频观看 | 精品国产乱码一区二区 | 一级做a爱片久久毛片a高清 | 日本s级毛片免费观看 | 草草久久久 | 欧美熟videos肥婆 | 黄色片免费在线播放 | av在线免费在线观看 | 嗯~啊~用力~高h | 国产成人精品午夜 | 免费黄色小视频网站 | 99ri在线 | 精品一区二区久久久久久按摩 | www日韩大片 | 久久久久久久久久久久久久久久久久 | 亚洲精品成人18久久久久 | 中国女人内谢69xxxx天美 | 永久av在线免费观看 | fc2国产成人免费视频 | 国产精品视频海角社区88 | av在线免费观看不卡 |