public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
Lankuan ss=new Lankuan();
Shenchan t=new Shenchan(ss);
Xiaofei tt=new Xiaofei(ss);
new Thread(t).start();
new Thread(tt).start();
}
}
class Baozi{
int id;
Baozi(int id){
this.id=id;
}
public String toString(){
return "baozi:"+id;
}
}
class Lankuan{
int index=0;
Baozi[] baozi=new Baozi[6];
public synchronized void push(Baozi bz){
if(index==baozi.length){
try{
this.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.notify();
baozi[index]=bz;
index++;
}
public synchronized Baozi pop(){
if(index==0){
try{
this.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
this.notify();
index--;
return baozi[index];
}
}
class Shenchan implements Runnable{
Lankuan b=null;
Shenchan(Lankuan b){
this.b=b;
}
@Override
public void run() {
// TODO 自动生成的方法存根
for(int i=0;i<20;i++){
Baozi h=new Baozi(i);
b.push(h);
System.out.println("生产了:"+h);
try{
Thread.sleep((int)Math.random()*1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
class Xiaofei implements Runnable{
Lankuan b=null;
Xiaofei(Lankuan b){
this.b=b;
}
@Override
public void run() {
// TODO 自动生成的方法存根
for(int i=0;i<20;i++){
Baozi h=b.pop();
System.out.println("消费了:"+h);
try{
Thread.sleep((int)Math.random()*2);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
线程同步-生产者与消费者问题
最新推荐文章于 2020-09-24 12:21:09 发布