我正在研究 Java 中生产者消费者问题的变体。我有一个生产者线程创建对象,这些对象被放入优先阻塞队列,然后传递到主容器控制器,它是一个有界缓冲区。
队列的原因是当主容器有一定百分比的对象 A 时,它只会接受类型 B 的对象,以及我们被要求查看的其他一些场景。我无法弄清楚代码出了什么问题,调试器只是从 InQueue 中的 in.offer 和 Producer 中的 in.push 跳转。任何方向或建议将不胜感激。
import java.util.concurrent.PriorityBlockingQueue;
public class InQueue implements Runnable {
Controller c;
private PriorityBlockingQueue in;
public InQueue(Controller c) {
this.c = c;
in = new PriorityBlockingQueue();
}
public void push(C c) {
in.offer(c);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
while (true) {
try {
C temp = (C) in.take(); //will block if empty
c.arrive(temp);
} catch (InterruptedException e) {} // TODO
}
}
}
public class Controller {
private BoundedBuffer buffer;
private int used;
Controller(int capacity) {
this.buffer = new BoundedBuffer(capacity);
used = 0;
}
public void arrive(C c) {
try {
buffer.put(c);
used++;
} catch (InterruptedException e) { } //TODO
}
public C depart() {
C temp = null; //BAD IDEA?
try {
temp = (C)buffer.take();
used--;
} catch (InterruptedException e) { } //TODO
return temp; //could be null
}
}