java多线程 生产者与消费者

编写程序时出现的问题1.直接在consummer thread and product thread 中产生consume的实例对象,那就产生了两个实例对象consume A and B,Thread(pro).start()调用的是A.put(),而Thread(consummer).start()调用的是B.get(),因此产生了不同步,可以采用构造函数让他们调用同一个实例对象。2.生产者不停存放,消费者不停消费,因此要有while()循环。3.设置进入等待的条件标志 boolean noproduct。

/***/ /**
*@(#)consume.java
*
*consumeapplication

*
@authorzhoubo
*
@version1.002008/3/24
*/



public class consume ... {
inti=0;
booleannoproduct=true;


publicstaticvoidmain(String[]args)...{

consumekk
=newconsume();
consummerconsumer
=newconsummer(kk);
productpro
=newproduct(kk);

/**//*consummerconsumer=newconsummer();//itismistake
productpro=newproduct();
*/


newThread(pro).start();
newThread(consumer).start();


}

publicsynchronizedvoidget()
...{

if(noproduct)
...{
try
...{
wait();
}

catch(InterruptedExceptione)
...{
}


}

else
i
--;
if(i==1)
...{
noproduct
=true;
notifyAll();
}


System.out.println(
"nowisconsume"+i);
}

publicsynchronizedvoidput()
...{

if(!noproduct)
...{
try
...{
wait();
}
catch(InterruptedExceptione)...{}
}

else
...{
i
++;
if(i==10)
...{
noproduct
=false;
notifyAll();
}


}

System.out.println(
"nowisproduct"+i);


}

}

class consummer extends Thread
... {
consumecon
/**//*=newconsume()*/;//thisismistake
publicconsummer(consumeconsume1)
...{
this.con=consume1;
}


publicvoidrun()
...{
while(true)
...{
con.get();
try
...{
this.sleep(1000);
}
catch(Exceptionerr)...{}
}


}

}

class product extends Thread
... {
consumecon
/**//*=newconsume()*/;//thisismistake
publicproduct(consumeconsume1)
...{
this.con=consume1;
}

publicvoidrun()
...{
while(true)
...{
con.put();
try
...{
this.sleep(1000);
}
catch(Exceptionerr)...{}
}


}

}

编译,没有问题,运行结果正常

有时会冒出下面的咚咚,好像MAIN()里没有异常啊,简单地throws处理,有没有人告诉我原因呢

java.lang.NoSuchMethodError: main
Exception in thread "main"

你可能感兴趣的:(java多线程)