Food类:食物 ,代表缓存里面的产品
FoodCache:缓存,用栈实现
Producer:生产者进程
Consumer:消费者进程
Demo:例子
/*
* @(#)Food.java, 2012-10-18 上午09:49:26
*
* All rights reserved.
*/
package com.wang.thread;
/**
* 在这里加入功能说明
*
* @author wangxiaowei
* @version $Revision: 1.4 $, 2012-10-18$
*/
public class Food
{
private int id;
public Food(int id)
{
this.id = id;
}
/**
* @return Returns the id.
*/
public int getId()
{
return id;
}
/**
* @param id The id to set.
*/
public void setId(int id)
{
this.id = id;
}
}
/*
* @(#)FoodCache.java, 2012-10-18 上午09:51:24
*
* All rights reserved.
*/
package com.wang.thread;
/**
* 在这里加入功能说明
*
* @author wangxiaowei
* @version $Revision: 1.4 $, 2012-10-18$/*
* @(#)Consumer.java, 2012-10-18 上午10:13:53
*
* All rights reserved.
*/
package com.wang.thread;
/**
* 在这里加入功能说明
*
* @author wangxiaowei
* @version $Revision: 1.4 $, 2012-10-18$
*/
public class Consumer extends Thread
{
private FoodCache foodCache;
public Consumer(FoodCache foodCache)
{
this.foodCache = foodCache;
}
public void run()
{
for(int i=0; i<10; i++)
{
synchronized(foodCache)
{
Food food = foodCache.pop();
System.out.println("消费了:"+food.getId()+"号食物!");
}
}
}
}
/*
* @(#)Producer.java, 2012-10-18 上午10:08:42
*
* All rights reserved.
*/
package com.wang.thread;
/**
* 在这里加入功能说明
*
* @author wangxiaowei
* @version $Revision: 1.4 $, 2012-10-18$
*/
public class Producer extends Thread
{
private FoodCache foodCache;
public Producer(FoodCache foodCache)
{
this.foodCache = foodCache;
}
public void run()
{
for(int i=0; i<10; i++)
{
synchronized(foodCache)
{
Food food = new Food(i);
System.out.println("生产了第"+food.getId()+"号食物");
foodCache.push(food);
}
}
}
}
/*
* @(#)Demo.java, 2012-10-18 上午10:15:53
*
* All rights reserved.
*/
package com.wang.thread;
/**
* 在这里加入功能说明
*
* @author wangxiaowei
* @version $Revision: 1.4 $, 2012-10-18$
*/
public class Demo
{
/**
*
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
FoodCache foodCache = new FoodCache();
Producer producer = new Producer(foodCache);
Consumer consumer = new Consumer(foodCache);
producer.start();
consumer.start();
}
}
*/ public class FoodCache { private int length = 10 ; private Food[] cache = new Food[length]; private int top = -1; public FoodCache() { } public Food pop() { while(top==-1) { try { System.out.println("缓存没有食物了,我的心在等待 ........."); this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } this.notify(); return cache[top--]; } public void push(Food food) { while(top==length-1) { try { this.wait(); System.out.println("缓存里面的食物已经满了,快来吃我吧!"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } this.notify(); cache[++top] = food; } }