线程----生产者与消费者

class Resourse {
    private Object[] os = new Object[1];//这里定义一个"容器"用来储存商品。
         Object  obs = new Object();
    public void put(Object o) {
        synchronized(obj){//这里加同步为了保证生产者生产的时候cpu不会切入到消费者上去。
                os[0] = o;
        System.out.println(Thread.currentThread().getName() + "生产者生产的---" + os[0]);
                }   
      }

    public void get() {
            synchronized(obj){/这里加同步为了保证消费者消费的时候cpu不会切入到生产者上去。
        System.out.println(Thread.currentThread().getName() + "消费者消费的---" + os[0]);
        os[0] = null;
      `  }
        }
}

class Sheng implements Runnable {
    private Resourse r;

    Sheng(Resourse r) {
        this.r = r;
    }

    public void run() {
                int num = 0;
        while (true) {
            
            r.put("自行车" + num);
            num++;

        }
    }
}

class Xiao implements Runnable {
    private Resourse r;

    Xiao(Resourse r) {
        this.r = r;
    }

    public void run() {
        while (true) {
            int num = 0;
            r.get();
            num++;

        }
    }
}

class Demo1 {
    public static void main(String[] args) {
        Resourse r = new Resourse();
        Sheng s = new Sheng(r);
        Xiao x = new Xiao(r);
        Thread ss = new Thread(s);
        Thread ss2 = new Thread(x);
        ss.start();
        ss2.start();
    }
}

我们之前玩的线程都只有一个run方法,生产者消费者两个独立的对象,要完成独立的线程内容。
用线程解决生产消费问题思路要明确。首先要定义一个“车库”用来储存商品,用一个对象来充当容器 private Object[] os = new Object[1];用对象来定义数组是我第一次遇到。
put 方法完成生产行为需要接收生产的东西,之后把生产的东西放到“容器”里,消费者消费的时候要从容器里拿。
注意:需要同步来解决安全问题,实现生产者生产好了再有消费者消费。

你可能感兴趣的:(线程----生产者与消费者)