java多线程中生产者和消费者问题
/*
* 创建日期 2006-9-8
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package sendproc;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
class Stack
{
int count;
String[] data=new String[20];
public synchronized void push(String str)
{
while(count==data.length)
{
try
{
this.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
this.notify();
data[count]=str;
count++;
}
public synchronized String get()
{
while(count==0)
{
try
{
this.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
this.notify();
count=count-1;
return data[count];
}
}
class Producer implements Runnable
{
Stack Stackone;
public Producer(Stack s)
{
Stackone=s;
}
public void run()
{
String str;
for(int i=0;i<20;i++)
{
str=String.valueOf(i+1);
Stackone.push(str);
System.out.println("Product:"+str+" count="+Stackone.count);
try
{
Thread.sleep((int)(Math.random()*100));
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
class Coumter implements Runnable
{
Stack stackOne;
public Coumter(Stack s)
{
stackOne=s;
}
public void run()
{
String s;
for(int i=0;i<20;i++)
{
s=stackOne.get();
System.out.println("Coumet:"+s+" count="+stackOne.count);
try
{
Thread.sleep((int)(Math.random()*100));
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
public class StackTest {
public static void main(String[] args) {
Stack s=new Stack();
Producer p=new Producer(s);
Coumter c=new Coumter(s);
Thread t1=new Thread(p);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}此为生产者和消费者模型,操作栈
但是执行结果却如下:
Product:1 count=1
Coumet:1 count=0
Coumet:2 count=0
Product:2 count=0
Coumet:3 count=0
Product:3 count=0
Product:4 count=1
Coumet:4 count=0
Product:5 count=1
Coumet:5 count=0
Product:6 count=1
Coumet:6 count=0
Coumet:7 count=0
Product:7 count=0
Product:8 count=1
Coumet:8 count=0
Coumet:9 count=0
Product:9 count=0
Coumet:10 count=0
Product:10 count=0
Coumet:11 count=0
Product:11 count=0
Coumet:12 count=0
Product:12 count=0
Coumet:13 count=0
Product:13 count=0
Product:14 count=1
Product:15 count=2
Coumet:15 count=1
Product:16 count=2
Product:17 count=3
Coumet:17 count=2
Product:18 count=3
Product:19 count=4
Coumet:19 count=3
Product:20 count=4
Coumet:20 count=3
Coumet:18 count=2
Coumet:16 count=1
Coumet:14 count=0
我实在弄不懂 为什么会出现
Product:1 count=1
Coumet:1 count=0
Coumet:2 count=0
这种情况呢?
生产者还没生产出来 消费者就消费掉了,请各位高手给小弟指点一二。