packageHow;class MyBuffer //模拟缓冲区,这个为临界资源
{
String data;//模拟缓存区存放的数据
publicMyBuffer(String data)
{this.data=data;
}
}public classbin_1
{public static voidmain(String[] args)
{
MyBuffer buffer=new MyBuffer("");
MyConsumer myConsumer=newMyConsumer(buffer);
MyProducter myProducter=newMyProducter(buffer);
myConsumer.start();
myProducter.start();
}
}class MyProducter extendsThread
{
MyBuffer buffer;publicMyProducter(MyBuffer buffer)
{this.buffer=buffer;
}//生产作业
public voidProducterJob()
{//模拟生产时间
try{
Thread.sleep((int )Math.random()*1000+400);
}catch(InterruptedException e)
{//TODO Auto-generated catch block
e.printStackTrace();
}//进入互斥资源
synchronized(buffer)
{if(buffer.data!="") //缓存区满着,阻塞
{try{
buffer.wait();
System.out.println("生产者等待");
Thread.sleep(500);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
buffer.data=""+System.currentTimeMillis();
System.out.println("生产者 :生产的数据为"+buffer.data);
buffer.notify();//唤醒消费者
}
}public voidrun()
{while(true)
{
ProducterJob();
}
}
}class MyConsumer extendsThread
{
MyBuffer buffer;publicMyConsumer(MyBuffer buffer)
{this.buffer=buffer;
}//消费作业
public voidConsumerJob()
{//模拟消费时间
try{
Thread.sleep((int )Math.random()*1000+600);
}catch(InterruptedException e)
{//TODO Auto-generated catch block
e.printStackTrace();
}//进入互斥资源
synchronized(buffer)
{if(buffer.data=="") //缓存区为空,阻塞
{try{
buffer.wait();
System.out.println("消费者等待");
Thread.sleep(500);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println("消费者 :消费的数据为"+buffer.data);
buffer.data="";
buffer.notify();//唤醒生产者
}
}public voidrun()
{while(true)
{
ConsumerJob();
}
}
}