Java 队列已满错误,使用多个使用者、生产者
我想模拟以下场景:多个使用者、生产者线程正在修改一些数据 安装程序 过滤器1 所以,概括一下:Producer将某些内容放入一个队列中,filter1从中读取。它修改数据并将其发布到另一个队列,过滤器2从中读取数据。过滤器2打印最终数据 此代码在以下情况下失败:Java 队列已满错误,使用多个使用者、生产者,java,multithreading,Java,Multithreading,我想模拟以下场景:多个使用者、生产者线程正在修改一些数据 安装程序 过滤器1 所以,概括一下:Producer将某些内容放入一个队列中,filter1从中读取。它修改数据并将其发布到另一个队列,过滤器2从中读取数据。过滤器2打印最终数据 此代码在以下情况下失败: Exception in thread "Thread-2" java.lang.IllegalStateException: Queue full 你能帮我理解为什么吗?你应该使用put()而不是add()同步队列总是空的满的,它没
Exception in thread "Thread-2" java.lang.IllegalStateException: Queue full
你能帮我理解为什么吗?你应该使用
put()
而不是add()
同步队列总是空的满的,它没有深度。put()将告诉队列挂起该线程,直到另一个线程进入并将该元素从队列中移除
add()
方法只有在有线程在等待时才会成功,如果没有线程在等待,您将获得队列已满异常 太棒了!非常感谢你,约翰萨德!!我只能投一次票。。但是,我希望给予更多。。我的代码在带有add()的windows上运行良好,但队列已满。。在linux中。。我做了一件愚蠢的事:(-谢谢约翰。@John为什么用windows而不用linux?你知道吗?
public void run() {
try {
while (true) {
this.q.put(saySomething());
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public String saySomething() {
return "Something";
}
public void run() {
try {
while (true) {
consume(qIn.take());
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
private void consume(String take) {
//Modify data according to some rules
String newData = take.replace("m", "-");
produce(newData);
}
private void produce(String newData) {
// put new data in queue out
qOut.add(newData); // <-- Stacktrace points here
}
public void run() {
try {
while (true) {
consume(qIn.take());
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
private void consume(String s) {
System.out.println("Something became: " + s);
}
Exception in thread "Thread-2" java.lang.IllegalStateException: Queue full