java实现生产者消费者,笔试遇到过
/*
- 生产者消费者模型, 也就是, 说在这里用java来直接模拟生产者与消费者, 生产一个取出一个, 取出一个再生产一个 
- 用Mes对象, 来存储生产和取出的消息, 用生产者和消费者两个线程来表示生产和取出的过程, 用synchronized来保证数据的同步 
- */ 
 class Mes{
 private String name; //信息组成内容, 姓名
 private String des; //信息组成内容, 描述- private boolean flag = true; //用于表示目前所处状态, 如果, flag为true, 则表示可以生产, 而不可以消费, 反过来则, 生产线程等待, 消费线程可以执行 
 public synchronized void set(String name, String des) //生产消息的代码
 {- if(!flag) //如果不能生产则挂掉, 也就是让县城等待 { try { super.wait(); } catch (InterruptedException e) { e.printStackTrace(); } ; } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); }
    //如果可以生产:
    this.name = name;
    this.des = des;
    //这个时候, 改变目前所处的状态:
    flag = false;
    //唤醒消费线程:
    super.notify();
}
public synchronized String get()        //取出消息的代码
{
    if(flag)            //如果处于不能取出的状态, 则:
    {
        try {
            super.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    try {
        Thread.sleep(10);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    //将数据取出之后, 记得唤醒生产线程
    try{
        return this.name + "-" + this.des;
    }finally {
        super.notify();
        flag = true;       //改变线程目前所处的状态
    }
}}
class coms implements Runnable{ //消费者类
private Mes mes;
public coms(Mes mes)
{
    this.mes = mes;
}
@Override
public void run() {
    for(int x =0; x< 50; x++)
    {
        System.out.println(this.mes.get());
    }
}}
class producer implements Runnable{ //生产者类
private Mes mes;
public producer(Mes mes)
{
    this.mes = mes;
}
@Override
public void run() {
    for(int x=0; x<50; x++)
    {
        if(x%2 == 0)
        {
            mes.set("Winni", "真是一个漂亮的小姑娘");
        }
        else
        {
            mes.set("小花小花", "blingblingbling");
        }
    }
}}
public class ProducerAndConsumer {
    public static  void main(String [] args)
    {
        System.out.println("咋回事儿");
        Mes mes = new Mes();
       // con c = new con(mes);
        coms cc = new coms(mes);
        producer p = new producer(mes);
    new Thread(p).start();
    new Thread(cc).start();
}}

 投递快手等公司10个岗位
投递快手等公司10个岗位