我已经开始学习线程,并使用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/