生产者和消费者有关问题 ,为什么结果有些不对。麻烦高人帮忙看看

   阅读
生产者和消费者问题 ,为什么结果有些不对。麻烦高人帮忙看看
结果为什么不是   放一个   取一个   ?

class   Test
{
public   static   void   main(String[]   args)
{
Queue   q=new   Queue();
new   Thread(new   Producer(q)).start();
new   Thread(new   Consumer(q)).start();
}
}
class   Producer   implements   Runnable
{
Queue   q;
Producer(Queue   q)
{
this.q=q;
}
public   void   run()
{
for(int   i=0;i <10;i++)
{
q.put(i);
System.out.println( "Producer   put   "+i);
}
}
}

class   Consumer   implements   Runnable
{
Queue   q;
Consumer(Queue   q)
{
this.q=q;
}
public   void   run()
{
while(true)
{
System.out.println( "Consumer   get   "+   q.get());
}
}
}
class   Queue
{
boolean   isFull=false;
int   value;
public   synchronized   void   put(int   i)
{
if(isFull)
{
try
{
wait();
}
catch(Exception   e)
{
e.printStackTrace();
}
}
value=i;
isFull=true;
notify();
}
public   synchronized   int   get()
{
if(!isFull)
{
try
{
wait();
}
catch(Exception   e)
{
e.printStackTrace();
}
}
isFull=false;
notify();
return   value;
}
}


------解决方案--------------------
多线程的意思 是模拟两个 CPU 同时运算,但具体分配给每个线程多少时间片,这是不得而知的,所以你启动两个线程,一个存数据,一个取数据, 将存取的方法设置为同步。 不表示就一定是先存后取,因为你的存的过程和取的过程 没有做协调控制, 只是在方法上作同步而已。
------解决方案--------------------
你要把你实际的运行结果和你所期望的运行结果贴出来
要不怎么知道你到底在想什么呢?
------解决方案--------------------
实际运行结果:
Producer put 0

Producer put 1

Consumer get 0

Producer put 2

Consumer get 1

Consumer get 2

Consumer get 3

Producer put 3

Consumer get 4

Producer put 4


期望运行结果:

Producer put 0

Consumer get 0

Producer put 1

Consumer get 1

Producer put 2

Consumer get 2

Producer put 3

Consumer get 3

Producer put 4

Consumer get 4

------解决方案--------------------
楼主写的程序有问题,参考这个看看吧
package test;

class Order {
private static int i = 0;
private int count = i++;
public Order() {
if(count == 50) {
System.out.println( "没有食物了! ");
System.exit(0);
}
}
public String toString() { return "第 " + count + "份食物\n "; }
}
class WaitPerson extends Thread {
private Restaurant restaurant;
public WaitPerson(Restaurant r) {
restaurant = r;
start();
}
public void run() {
while(true) {
while(restaurant.order == null)
synchronized(this) {
try {
wait();
} catch(InterruptedException e) {
throw new RuntimeException(e);
}
}
阅读