您的位置:首页 > 编程语言 > Java开发

用Java实现生产者消费者问题

2012-09-18 18:40 246 查看
package javaTest;

//测试类
public class ProCon{

public static void main(String[] args){
SyncQueue queue = new SyncQueue();
Consumer p = new Consumer(queue);
Producer c = new Producer(queue);

new Thread(p).start();
new Thread(c).start();
}
}
//生产者
class Producer implements Runnable{
private SyncQueue queue;
private int count = 0;
public Producer(SyncQueue queue){
this.queue = queue;
}
public void run(){
while(true){
String product = "产品"+count;
queue.put(product);
count++;
System.out.println("生产了: "+product);
try{
Thread.sleep(2000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
//消费者
class Consumer implements Runnable{
private SyncQueue queue;

public Consumer(SyncQueue queue) {
this.queue = queue;
}

public void run(){
while(true){
String product = queue.get();
System.out.println("消费了: "+product);
try{
Thread.sleep(2000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
//公共缓冲区
class SyncQueue{
private String[] queue = new String[10];
private int index = 0;
//生产者把产品放入队列
public synchronized void put(String productor){
if(index == queue.length){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
queue[index] = productor;
index++;
//唤醒在此对象监视器上等待的消费者线程
notify();
}
//消费者从队列中取出一个产品消费
public synchronized String get(){
if(index == 0){
try{
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
index--;
String product = queue[index];
//唤醒在此对象监视器上等待的生产者线程
notify();
return product;
}

}
本文转自
:/article/2736861.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: