一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JAVA生產者消費者(線程同步)代碼學習示例

JAVA生產者消費者(線程同步)代碼學習示例

2019-10-22 11:28java之家 Java教程

這篇文章主要介紹了JAVA線程同步的代碼學習示例,大家參考使用吧

一、問題描述

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

二、解決方案

對容器資源加鎖,當取得鎖后,才能對互斥資源進行操作。

 

復制代碼代碼如下:


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{//容器采用棧,先進后出
    private int index = 0;
    Goods[] goods = new Goods[6];

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

    public synchronized Goods pop(){
        while(index==0){//當容器內沒有商品是等待
            try {
                wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        index--;
        notifyAll();//當消費者消費了商品后通知生產者
        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("生產了:"+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("消費了:"+good);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 1024国产精品视频观看 | 美女扒开尿口让男生添 漫画 | 亚洲精品久久久打桩机 | 日韩aaa | jazz中国在线视频 | 99视频久久精品久久 | 欧美日韩国产另类一区二区三区 | 教练你好大轻点漫 | 欧美日本一道高清二区三区 | 丝瓜视频看污片 | 羞羞视频免费观看网站 | 国产精品九九热 | 国产成人精品曰本亚洲77美色 | 日本五十路六十30人8时间 | 精品一久久香蕉国产线看观 | 1769在线观看 | 国产 日韩 欧美视频二区 | 91欧美国产| 国产精品极品美女自在线 | 亚洲欧美成人综合在线 | 国产在线一区二区杨幂 | 1024香蕉视频 | 花唇肿胀无法合拢双性 | 久久九九久精品国产尤物 | yy8090韩国日本三理论免费 | 亚洲精品www久久久久久久软件 | voyeur 中国女厕 亚洲女厕 | 亚洲精品中文字幕在线 | 3d动漫h在线观看网站蜜芽 | 甜蜜调教| 国产一区二区三区欧美 | 国产精品最新资源网 | 欧美日韩高清观看一区二区 | 欧美在线一级片 | 精品亚洲视频在线观看 | 加勒比一本大道在线 | china国产bbw| 日韩一 | 99这里只有精品视频 | 天天快乐高清在线观看 | 4444亚洲国产成人精品 |