本帖最后由 彭盼 于 2012-3-18 00:46 编辑
可以试试把count定义到info类中:
我修改了下,你看看是不是你想要的结果:
class info
{
private String name=null;
int count=0;
private boolean flag=true;
public synchronized void set(String name)
{
if(!flag) //标志位为false 则不可以生产
{
try
{
super.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
this.name=name;
try
{
Thread.sleep(300);//加入延时
}
catch(InterruptedException e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"生产电脑编号为"+this.getName()+this.count);
flag=false;
super.notify();
}
public synchronized void get()
{
if(flag)//如果为true则不取走,等待生产者生产
{
try
{
super.wait();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
try
{
Thread.sleep(300);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"搬走电脑编号为"+this.getName()+this.count);
flag=true; //取走之后设置标志位为真,表示等待生产者生产
super.notify();
}
public String getName()
{
return name;
}
}
class Producter implements Runnable
{
private info info1=null;
public Producter(info info1)
{
this.info1=info1;
}
public void run()
{
boolean flag=true;//判断生产电脑A还是电脑B ,间隔生产
for(int i=0;i<50;i++)
{
if(flag) //如果是true则 生产
{
info1.set("电脑B");
flag=false;
}
else
{
info1.set("电脑A");
flag=true;
}
}
}
}
class custorm implements Runnable
{
private info info1=null;
custorm(info info1)
{
this.info1=info1;
}
public void run()
{
int num=0;
for(int i=0;i<50;i++)
{
try
{
Thread.sleep(300); //加入延时
}
catch(InterruptedException e)
{
e.printStackTrace();
}
info1.get();
num++;//计数
info1.count=num;
}
System.out.println("总共生产电脑数量为:"+info1.count);
}
}
class PBDemo
{
public static void main(String[] args)throws Exception
{
info i=new info();
Producter pro=new Producter(i);
custorm cus=new custorm(i);
new Thread(pro).start();
new Thread(cus).start();
System.out.println(i.count);
}
}
最后程序运行结果:
|
|