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 方法完成生产行为需要接收生产的东西,之后把生产的东西放到“容器”里,消费者消费的时候要从容器里拿。
注意:需要同步来解决安全问题,实现生产者生产好了再有消费者消费。