面试-----手写生产者消费者

代码是copy的 ,忘了网址


import java.util.ArrayList;
import java.util.List;

/**
 * Created with IDEA.
 * User:haibo.
 * DATE:2018/7/22/022
 */
public class Shop {
    List<String> data = new ArrayList<String>();
    public void produce(){
        synchronized (data) {
            if(data.size()>0){
                System.out.println("可以卖面包了");
                data.notify();
                try {
                    data.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            String a = "面包"+System.currentTimeMillis();
            data.add(a);
            System.out.println("生成了:"+a+",找人来吃,现在面包个数为:"+data.size());
            //data.notify();
        }

    }

    public void sale(){
        synchronized (data) {
            if(data.size()==0){
                try {
                    System.out.println("没面包了该通知做面包了");
                    data.notify();
                    data.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            String s = data.get(0);
            data.remove(0);
            System.out.println("吃掉了面包"+s);
            data.notify();
        }

    }

    public static void main(String[] args) {
        Shop shop = new Shop();
        Thread productor = new Thread(new Productor(shop));
        Thread customer = new Thread(new Customer(shop));
        productor.start();
        customer.start();


    }
}
class Productor implements Runnable{
    Shop shop;

    public Productor(Shop shop) {
        super();
        this.shop = shop;
    }

    @Override
    public void run() {
        while(true){
            shop.produce();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        // TODO Auto-generated method stub

    }
}
class Customer implements Runnable{
    Shop shop;

    public Customer(Shop shop) {
        super();
        this.shop = shop;
    }
    @Override
    public void run() {

        while(true){
            shop.sale();
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        }

    }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值