gpt4 book ai didi

java - 为什么我的生产者消费者程序结束了?

转载 作者:行者123 更新时间:2023-12-01 04:20:40 25 4
gpt4 key购买 nike

作为练习,我编写了以下代码来练习生产者/消费者模式:

public class Producer implements Runnable {
BlockingQueue<Entity> entities;

public Producer(BlockingQueue<Entity> entities) {
this.entities = entities;
}

@Override
public void run() {
for (int i = 0; i <= 20; i++) {
Entity en = new Entity();
System.out.println("Producing entity: " + Integer.toString(i));
en.setName(Integer.toString(i));
entities.add(en);
}
}
}

public class Consumer implements Runnable {
BlockingQueue<Entity> entities;

public Consumer(BlockingQueue<Entity> entities) {
this.entities = entities;
}

@Override
public void run() {
try {
while (true) {
System.out.println("Consuming entity: "
+ entities.take().getName());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


public class MainPCClass {
BlockingQueue<Entity> entities = new LinkedBlockingQueue<Entity>(5);

public void start(){
//start the producer
new Thread(new Producer(entities)).start();
//start the consumer
new Thread(new Consumer(entities)).start();
}
}

我希望考虑到消费者中上面的 while(true) ,我的程序永远不会结束,并且消费者线程会被阻塞,因为在生产者生产完所有内容后队列为空。这是为什么?我错过了什么吗?难道我做错了什么?我的程序运行和结束都很顺利。

最佳答案

  • 你的程序永远不会停止,因为你使用的线程没有设置为守护线程。仅当所有剩余线程都是守护线程时,JVM 才会完成。

  • 运行程序时,您可能会收到 IllegalStateException: Queue full,因为生产者超出了您设置列表的 5 个限制。

关于java - 为什么我的生产者消费者程序结束了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com