package com.dxc.cn;
public class Resource {
private String name;
private int count = 1;
private boolean flag = false;
public synchronized void set(String name) {
while (flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.name = name + "!!!!!!!" + count++;
System.out.println(Thread.currentThread().getName()
+ "..生产者..................." + this.name);
flag = true;
this.notifyAll();
}
public synchronized void out() {
while (!flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + "..消费者.."
+ this.name);
flag = false;
this.notifyAll();
}
}
class Producer implements Runnable {
private Resource res;
public Producer(Resource res) {
this.res = res;
}
public void run() {
for (int i = 0; i < 50; i++) {
res.set("商品+");
}
}
}
class Consume implements Runnable {
private Resource res;
public Consume(Resource res) {
this.res = res;
}
public void run() {
for (int i = 0; i < 50; i++) {
res.out();
}
}
}
while循环和notifyAll() 用于多个生产者和消费者的情况