我已经开始学习线程,并使用JDK 5.0中引入的并发包尝试了Java中的Producer使用者问题,我编写了以下代码:

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

class Producer implements Runnable {
    private final BlockingQueue<Integer> objqueue;

    Producer(BlockingQueue<Integer> obj) {
    objqueue = obj;
    }

    @Override
    public void run() {
    int i = 0;
    while (i < 10) {
        try {
            System.out.println("Put : " + i);
            objqueue.put(i);
        } catch (InterruptedException e) {
        }
        i++;
    }
    }
}

class Consumer implements Runnable {
private final BlockingQueue<Integer> objqueue;

Consumer(BlockingQueue<Integer> obj) {
    objqueue = obj;
}

@Override
public void run() {
    while (true) {
        try {
            System.out.println("Got : " + objqueue.take());
        } catch (InterruptedException e) {
        }
    }
}

}

public class PCMain {

public static void main(String[] args) {
    // create shared object
    BlockingQueue<Integer> obj = new LinkedBlockingQueue<Integer>();

    Thread prod = new Thread(new Producer(obj));
    Thread cons = new Thread(new Consumer(obj));

    prod.start();
    cons.start();
}

}


当生产者最多生产9个消费者并且消费最多9个消费者时,该程序不会终止。我应该删除while循环吗?

如何为超过一个生产者和一个消费者生产它?
谢谢。

最佳答案

好吧,您有两个线程,一个线程应该i == 10停止一次。但是另一个线程处于无限循环中。您需要向使用方信号通知应用程序应结束。将Poison Pill视为告诉第二个线程停止的一种方式。

直到消耗线程完成,程序本身才会停止。

关于java - 生产者消费者使用阻塞队列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28305983/

10-14 07:39