使用隊(duì)列的生產(chǎn)者/使用者線程我想創(chuàng)造一些Producer/Consumer線程應(yīng)用程序。但我不知道在兩者之間實(shí)現(xiàn)隊(duì)列的最佳方式是什么。所以我有兩個(gè)想法(這兩個(gè)想法都可能是完全錯(cuò)誤的)。我想知道哪一個(gè)更好,如果兩者都很糟糕,那么實(shí)現(xiàn)隊(duì)列的最佳方法是什么。我關(guān)心的主要是這些例子中隊(duì)列的實(shí)現(xiàn)。我正在擴(kuò)展一個(gè)隊(duì)列類,它是一個(gè)內(nèi)部類,并且是線程安全的。下面是兩個(gè)例子,每個(gè)例子有4個(gè)類。主修班-public class SomeApp{
private Consumer consumer;
private Producer producer;
public static void main (String args[])
{
consumer = new Consumer();
producer = new Producer();
}}消費(fèi)者階層-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());
}
}}排隊(duì)類-public class QueueHandler{
//This Queue class is a thread safe (written in house) class
public static Queue<Object> readQ = new Queue<Object>(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<Object> readQ;
private Consumer consumer;
private Producer producer;
public static void main (String args[])
{
readQ = new Queue<Object>(100);
consumer = new Consumer(readQ);
producer = new Producer(readQ);
}}
3 回答

largeQ
TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
把你所有的制片人放在一起 把你所有的消費(fèi)者都放在另一個(gè) ExecutorService
;如果有必要,使用
final ExecutorService producers = Executors.newFixedThreadPool(100);final ExecutorService consumers = Executors.newFixedThreadPool(100);while (/* has more work */) { producers.submit(...);}producers.shutdown();producers.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);consumers.shutdown();consumers.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
producers
consumers
.
添加回答
舉報(bào)
0/150
提交
取消