当前位置: 代码迷 >> Java相关 >> 生产者、消费者问题
  详细解决方案

生产者、消费者问题

热度:377   发布时间:2006-11-28 10:43:54.0
生产者、消费者问题

帮忙看一下,为什么有的地方,结果也打印出来了是先消费后生产呢,谢谢!
class Queue
{
boolean available = false;
int value;
public synchronized void setValue(int value)
{
if (!available)
{
this.value = value;
available = true;
notify();
}
//数据还没有取走则等待
try
{
wait();
}
catch (Exception e)
{
e.printStackTrace();
}
}

public synchronized int getValue()
{
if (!available)//没有准备好就等待
{
try
{
wait();
}
catch (Exception e)
{
e.printStackTrace();
}
}
//准备好了数据返回该数据
available = false;
notify();
return value;
}
}
class producer extends Thread
{
Queue q;
producer(Queue q)
{
this .q= q ;
}
public void run ()
{
for (int i = 0; i<10; i++)//共放了十个数据
{
q.setValue(i);
System.out.println("producer:"+i);
}
}
}
class consumer extends Thread
{
Queue q ;
consumer(Queue q)
{
this.q = q;
}
public void run ()
{
while (true )
{
System.out.println("consumer:"+q.getValue());
}
}
}

public class sychronizedThread
{
public static void main(String[] args)
{
Queue q = new Queue();
producer pro = new producer(q); //实例化两个线程
consumer con = new consumer(q);
pro.start();
con.start();
}

}

搜索更多相关的解决方案: 消费者  生产者  value  available  int  

----------------解决方案--------------------------------------------------------
怎么会呢
----------------解决方案--------------------------------------------------------
是这样的哦
很奇怪,不知道那的错误哦!
----------------解决方案--------------------------------------------------------
那是你放错位置了
q.setValue(i);
System.out.println("producer:"+i);
把这两句调换一下就可以了
----------------解决方案--------------------------------------------------------
换了后还是有点问题阿
并不是产生一个,接着消费掉这个数据阿
----------------解决方案--------------------------------------------------------

并是因为这个,而是因为线程起动的问题


----------------解决方案--------------------------------------------------------

线程  看了N多的例子  越看越糊涂


----------------解决方案--------------------------------------------------------
越糊涂越要看
----------------解决方案--------------------------------------------------------
到底怎样启动线程,才能输出正确嘛!
----------------解决方案--------------------------------------------------------

我这里一直都是正确的啊


----------------解决方案--------------------------------------------------------
  相关解决方案