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;
}
}
分享到:
相关推荐
a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能
本实验要求设计在同一个进程地址...生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费者线程释放出一个空缓冲区;消费者线程消费物品时,若缓冲区为空,消费者线程将被阻塞,直到新的物品被生产出来。
java多线程实现生产者和消费者
解决多线程编程中的同步互斥问题
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
在linux上分别用多进程和多线程实现的同步互斥操作(源代码)
(1) 通过编写程序实现进程同步和互斥,掌握有关进程(线程)同步与互斥的原理,以及解决进程(线程)同步和互斥的算法,从而进一步巩固进程(线程)同步和互斥等有关的内容。 (2) 了解Windows2000/XP中多线程的...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
操作系统线程同步和互斥,生产者和消费者问题例子,VC++编写
基本满足操作系统课上要求,java实现的生产者消费者模型。
java多线程实现生产者消费者关系,完成线程之间的同步。
操作系统实验 多线程同步与互斥 java编写 可动态创建
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
本例将模仿经典的线程同步互斥例子——生产者和消费者问题,来演示 java 强大的多线程机制。生产者和消费者共享一个数据,当数据为0 时,消费者不可访问,生产者可访问数据,每次访问数据加1;当数据到达100 时,...
生产者消费者模式是java多线程经典的安全,它用到了同步,资源共享,wait,notify等技术。
假设存在两类进程:生产者,消费者。它们共享n个缓冲区。 生产者行为:生产产品(每次生产1个),并将产品放入空缓冲区,循环 往复,永不停息; 消费者行为:将产品从缓冲区中取出,进行消费(每次消费1个),循环 往复...
用多线程同步方法解决生产者-消费者问题(操作系统课设