用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

生产者与消费者

2016-08-22 作者: dzofmine举报

[java]代码库

public class Goods {//商品类
    //私有属性
    private String brand;//品牌
    private String name;//商品的名称
    private boolean flag;//标识是否有商品,默认值是false,代表没有商品,
    //公有的取值,赋值方法
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    //生产商品的方法
    public synchronized void produc(String brand,String name){
        if (flag) {//flag的值为false时,没有商品,生产者生产商品,如果flag的值为true时,代表有商品,生产者等待
            try {
                super.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }//调用的是Object类中的wait方法
        }//被唤醒后,代表没有商品了,没有商品就开始生产
        this.brand=brand;//局部变量的值赋值给成员变量
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        this.name=name;
        System.out.println("生产者生产了"+this.brand+"----------------"+this.name);
        /**商品生产结束*/
        flag=true;
        super.notify();//通知消费者线程
         
    }
    //消费者取走商品的同步方法
    public synchronized void custom(){
        if (flag==false) {//没有商品时,消费者等待,
            try {
                super.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }//没有商品时,消费者等待
        }//有商品时,取走商品
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("--------------------消费者取走了商品-----------"+this.brand+"==========="+this.name);
        /**商品已取走*/
        flag=false;
        super.notify();
    }
     
}
 
//生产者线程
public class Producer implements Runnable {
    //共享资源作为类的属性有属性
    private Goods g;
    //带参构造方法
    public Producer(Goods g) {
        super();
        this.g = g;
    }
 
    @Override
    public void run() {//生产者要做的事情是生产商品
        for (int i = 0; i <10; i++) {
            if (i%2==0) {//偶数
                //调用生产商品的方法
                g.produc("娃哈哈", "矿泉水");
            }else {//奇数
                g.produc("旺仔", "小馒头");
            }
             
        }
    }
 
}
package cn.bjsxt.pc3;
//生产者线程
public class Producer implements Runnable {
    //共享资源作为类的属性有属性
    private Goods g;
    //带参构造方法
    public Producer(Goods g) {
        super();
        this.g = g;
    }
 
    @Override
    public void run() {//生产者要做的事情是生产商品
        for (int i = 0; i <10; i++) {
            if (i%2==0) {//偶数
                //调用生产商品的方法
                g.produc("娃哈哈", "矿泉水");
            }else {//奇数
                g.produc("旺仔", "小馒头");
            }
             
        }
    }
 
}
 
//消费者的线程-->负责取商品
public class Customer implements Runnable {
    //共享资源是商品
    private Goods gg;//共享资源作为线程类的私有属性
    //带参构造方法
    public Customer(Goods gg) {
        super();
        this.gg = gg;
    }
    @Override
    public void run() {//这是消费者线程,负责取走商品
        for (int i = 0; i <10; i++) {
            //调用取走的同步方法
            gg.custom();
        }
    }
     
     
}
 
 
public class Test {
    public static void main(String[] args) {
        /**1.创建共享资源的对象*/
        Goods g=new Goods();
        /**2.创建生产者线程的对象*/
        Producer p=new Producer(g);
        /**3.创建消费者线程的对象*/
        Customer c=new Customer(g);
        //启动两个线程
        new Thread(p).start();//启动生产者线程
        new Thread(c).start();//启动消费者线程
    }
}


网友评论    (发表评论)

共2 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...