java 消费者 生产者 队列_Java使用队列的生产者/消费者线程

我想创建某种Producer/Consumer线程应用程序。但是我不确定在两者之间实现队列的最佳方法是什么。

因此,我提出了两个想法(这两个想法可能都是完全错误的)。我想知道哪种更好,如果它们都烂了,那么实现队列的最佳方法是什么。我关心的主要是这些示例中队列的实现。我正在扩展一个内部类的Queue类,它是线程安全的。下面是两个示例,每个示例有4个类。

主班

public class SomeApp

{

private Consumer consumer;

private Producer producer;

public static void main (String args[])

{

consumer = new Consumer();

producer = new Producer();

}

}

消费阶层

public class Consumer implements Runnable

{

public Consumer()

{

Thread consumer = new Thread(this);

consumer.start();

}

public void run()

{

while(true)

{

//get an object off the queue

Object object = QueueHandler.dequeue();

//do some stuff with the object

}

}

}

生产者类别

public class Producer implements Runnable

{

public Producer()

{

Thread producer = new Thread(this);

producer.start();

}

public void run()

{

while(true)

{

//add to the queue some sort of unique object

QueueHandler.enqueue(new Object());

}

}

}

队列类

public class QueueHandler

{

//This Queue class is a thread safe (written in house) class

public static Queue readQ = new Queue(100);

public static void enqueue(Object object)

{

//do some stuff

readQ.add(object);

}

public static Object dequeue()

{

//do some stuff

return readQ.get();

}

}

要么

主班

public class SomeApp

{

Queue readQ;

private Consumer consumer;

private Producer producer;

public static void main (String args[])

{

readQ = new Queue(100);

consumer = new Consumer(readQ);

producer = new Producer(readQ);

}

}

消费阶层

public class Consumer implements Runnable

{

Queue queue;

public Consumer(Queue readQ)

{

queue = readQ;

Thread consumer = new Thread(this);

consumer.start();

}

public void run()

{

while(true)

{

//get an object off the queue

Object object = queue.dequeue();

//do some stuff with the object

}

}

}

生产者类别

public class Producer implements Runnable

{

Queue queue;

public Producer(Queue readQ)

{

queue = readQ;

Thread producer = new Thread(this);

producer.start();

}

public void run()

{

while(true)

{

//add to the queue some sort of unique object

queue.enqueue(new Object());

}

}

}

队列类

//the extended Queue class is a thread safe (written in house) class

public class QueueHandler extends Queue

{

public QueueHandler(int size)

{

super(size); //All I'm thinking about now is McDonalds.

}

public void enqueue(Object object)

{

//do some stuff

readQ.add();

}

public Object dequeue()

{

//do some stuff

return readQ.get();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值