我是java的新手,我正在尝试实现简单的生产者消费者问题.下面是我为测试它而编写的代码.我有3个类,主类,生产者类和消费者类.现在的问题是我的生产者正在生产数据,但我的消费者并没有消费它.有人可以解释一下为什么会发生这种情况.提前致谢.
public class ProducerConsumerWithQueue {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<String > queue = new ArrayList<String>();
Producer producer = new Producer( queue);
Consumer consumer = new Consumer( queue);
consumer.start();
producer.start();
}
}
public class Producer extends Thread{
ArrayList<String> queue;
public Producer(ArrayList<String> queue) {
this.queue = queue;
}
public void run(){
System.out.println("Producer Started");
System.out.println("Producer size "+queue.size());
for(int i=0;i<50;i++){
try {
synchronized (this) {
if(queue.size()>10){
System.out.println("Producer Waiting");
wait();
}else{
System.out.println("producing "+i);
queue.add("This is "+i);
notifyAll();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Consumer extends Thread{
ArrayList<String> queue;
public Consumer(ArrayList<String> queue) {
this.queue = queue;
}
public void run(){
System.out.println("Consumer started");
System.out.println("Consumer size "+queue.size());
try {
synchronized (this) {
for(int i=0; i>10; i++){
if(queue.isEmpty()){
System.out.println("Consumer waiting()");
wait();
}else{
System.out.println("Consuming Data "+queue.remove(i));
notifyAll();
}
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的消费者将永远不会运行,因为for循环甚至不会运行一次
for(int i=0; i>10; i++){
Run Code Online (Sandbox Code Playgroud)
检查i> 10约束.可能你想尝试i<10
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |