public class Producer implements Runnable{
private String name;
private Food food;
Producer() {
}
Producer(String name, Food food) {
this();
this.name = name;
this.food =food;
}
public String getName() {
return this.name;
}
public int getFood() {
return food.getNum();
}
public void product () {
while (true) {
System.out.println(this.getName()+"生产了食物,剩余"+food.produce()+"个");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void run() {
// TODO Auto-generated method stub
this.product();
}
}
class Food {
private static int num =0;
Food (int num){
Food.num = num;
}
public int getNum() {
return Food.num;
}
public synchronized int produce (){
Food.num++;
notify();
return num;
}
public synchronized void consume () {
if (num>0) {
Food.num--;
}
else {
System.out.println("食物没有了,等待生产");
try {
wait();
Food.num--;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Customer.java
public class Customer implements Runnable{ private String name; private Food food; Customer(){ } Customer(String name,Food food) { this(); this.name = name; this.food = food; } public String getName() { return this.name; } public int getFood() { return food.getNum(); } public void custom () { while (true) { food.consume(); System.out.println(this.getName()+"消费了食物,剩余"+food.getNum()+"个"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void run() { // TODO Auto-generated method stub this.custom(); } }
Test.java
public class Test { public static void main (String[] args) { Food food = new Food(5); Producer pro = new Producer("pro1",food); Customer cus = new Customer("cus1",food); Thread t1 = new Thread(pro); Thread t2 = new Thread(cus); t1.start(); t2.start(); } }